亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? dxjs_main.pas

?? Well known and usefull component for delphi 7
?? PAS
?? 第 1 頁 / 共 2 頁
字號:
////////////////////////////////////////////////////////////////////////////
//    Component: TJScript
//       Author: Alexander Baranovsky (ab@virtlabor.donbass.com)
//               G.E. Ozz Nixon Jr. (staff@bpdx.com)
// ========================================================================
// Source Owner: DX, Inc. 2002, 2004
//    Copyright: All code is the property of DX, Inc. Licensed for
//               resell by Brain Patchwork DX (tm) and part of the
//               DX (r) product lines, which are (c) 1999-2002
//               DX, Inc. Source may not be distributed without
//               written permission from both Brain Patchwork DX,
//               and DX, Inc.
//      License: (Reminder), None of this code can be added to other
//               developer products without permission. This includes
//               but not limited to DCU's, DCP's, DLL's, OCX's, or
//               any other form of merging our technologies. All of
//               your products released to a public consumer be it
//               shareware, freeware, commercial, etc. must contain a
//               license notification somewhere visible in the
//               application.
// Code Version: (3rd Generation)
// ========================================================================
//  Description: JavaScript interpreter maanger.
// ========================================================================
////////////////////////////////////////////////////////////////////////////

unit DXJS_MAIN;
interface

{$I DXJavaScript.def}

uses
{$IFDEF VARIANTS}
  Variants,
{$ENDIF}
  SysUtils,
  Classes,
  TypInfo,
  DXJS_SHARE,
  DXJS_SCANNER,
  DXJS_SYMBOL,
  DXJS_PARSER,
  DXJS_POSTFIX,
  DXJS_LIST,
  DXJS_EXTERN,
  DXJS_OBJECT,
  DXJS_CONV;

type
  TModule = class(TStringList)
  public
    Name: String;
    FileName: String;
  end;

  TModules = class
  private
    List: TList;
    function GetModule(Index: Integer): TModule;
    function GetCount: Integer;
    function GetSourceCode: String;
  public
    constructor Create;
    procedure Clear;
    function IndexOf(const Name: String): Integer;
    function Add(const Name: String): Integer;
    procedure Delete(Index: Integer);
    destructor Destroy; override;
    property Items[Index: Integer]: TModule read GetModule; default;
    property Count: Integer read GetCount;
    property SourceCode: String read GetSourceCode;
  end;

  TScriptEvent = procedure(const ScriptObject: Variant) of object;

  TGetExtraPropertyEvent = function (Sender: TObject; Instance: TObject;
                                 const PropertyName: String): Variant of object;

  TPutExtraPropertyEvent = procedure (Sender: TObject; Instance: TObject; const PropertyName: String;
                                 const Value: Variant) of object;

  TVariableEvent = procedure (Sender: TObject; const Name: String; var Value: Variant) of object;

  TJScript = class
  public
    Modules: TModules;
    SymbolTable: TSymbolTable;
    Scanner: TScanner;
    Parser: TParser;
    Postfix: TPostfix;
    LineCount: Integer;
    StdDefinitionList: TDefinitionList;
    HostDefinitionList: TDefinitionList;
    PropDefList: TPropDefList;
    RemovePropList: TRemovePropList;
    HostVariableList: THostVariableList;
    ConstantList: TConstantList;
    HostObjectList: THostObjectList;
    HostConstructorList: THostConstructorList;
    EventHandlerList: TEventHandlerList;
    fOnShowError: TScriptEvent;
    Error: TVariant;
    ZeroBasedStringIndex: boolean;
    Garbage: TGarbage;
    GlobalObject: TGlobalObject;
    ScriptState: TScriptState;
    OpenWindows: TList;

    fOnGetExtraProperty: TGetExtraPropertyEvent;
    fOnPutExtraProperty: TPutExtraPropertyEvent;
    fOnUndefinedVariable: TVariableEvent;
    fOnChangedVariable: TVariableEvent;

    Owner: TComponent;

    constructor Create(Owner: TComponent); 
    destructor Destroy; override;
    function AddModule(const ModuleName: String): Integer;
    procedure AddCode(const ModuleName, Code: String);
    procedure AddCodeFromFile(const ModuleName, FileName: String);
    procedure AddObject(const Name: String; Instance: TObject);
    procedure AddRoutine(const Name: String; Address: Pointer);
    procedure AddMethod(AClass: TClass; const Name: String; Address: Pointer);
    procedure AddConstructor(AClass: TClass; Address: Pointer);
    procedure AddProperty(AClass: TClass; const Name: String;
                          ReadAddr, WriteAddr: Pointer);
    procedure RemoveProperty(AClass: TClass; const Name: String);
    procedure AddHostVariable(const Name: String; Address: Pointer);
    procedure AddConstant(const Name: String; const Value: Variant);
    procedure SaveToStream(S: TStream);
    procedure LoadFromStream(S: TStream);
    procedure Print;
    function ParseModule(const I:Integer): boolean;
    function Parse: boolean;
    function Run(RunMode: Integer = rmRun): boolean;
    procedure Reset;
    procedure ClearModule(const Modulename:String);
    procedure CreateErrorObject(E: Exception);
    procedure ShowError(const Error: TVariant); virtual;
    function Eval(const Code: String): Variant;
    function GetID(const Name: String): Integer;
    function GetValue(ID: Integer): Variant;
    procedure PutValue(ID: Integer; const Value: Variant);
    function CallFunction(SubID: Integer; const Parameters: array of Variant): Variant;
    function SourceLineToPCodeLine(const ModuleName: String; LineNumber: Integer): Integer;
    function AddBreakpoint(const ModuleName: String; LineNumber: Integer): boolean;
    function RemoveBreakpoint(const ModuleName: String; LineNumber: Integer): boolean;
    procedure RemoveAllBreakpoints;
    procedure ExtractCallStack(CallStack: TStringList);
    function CurrentLineNumber: Integer;
    function CurrentModule: String;
    function CurrentLine: String;
    function CurrentFunction: String;
    procedure ResetRun;
    procedure Terminate;
  end;

// Routines Found in DXJS_CONV, brought Forward:
function ToBoolean(const Value: TVariant): Boolean;
function ToNumber(const Value: TVariant): Double;
function ToInteger(const Value: TVariant): Integer;
function ToString(const Value: TVariant): String;
function ToDelphiObject(Value: TVariant): TObject;
function DelphiObjectToVariant(Instance: TObject): Variant;
function GetProperty(const ScriptObject: Variant; PropertyName: String): Variant;
function IsPrimitive(const Value: Variant): boolean;

var
  RTTITypeList: TStringList;

implementation

Uses
{$IFDEF LINUX}
  QForms,
{$ELSE}
  Forms, // uses TForm
{$ENDIF}
  DXString; // from DXFreeware

constructor TModules.Create;
begin
  inherited;
  List := TList.Create;
end;

destructor TModules.Destroy;
var
  I: Integer;
  Module: TModule;
begin
  for I:=List.Count - 1 downto 0 do begin // 803 downto
    Module := TModule(List[I]);
    Module.Free;
  end;
  List.Free;
  inherited;
end;

function TModules.GetModule(Index: Integer): TModule;
begin
  if (Index < 0) or (Index >= Count) then Result:=Nil
  Else result := TModule(List[Index]);
end;

procedure TModules.Delete(Index: Integer);
begin
  if (Index < 0) or (Index >= Count) then Exit;
  TModule(List[Index]).Free;
  List.Delete(Index);
end;

procedure TModules.Clear;
var
  I: Integer;
begin
  for I:=Count-1 downto 0 do Delete(I); //803 downto!
end;

function TModules.GetSourceCode: String;
var
  I: Integer;
begin
  result := '';
  for I:=0 to Count-1 do result:=result+GetModule(I).Text;
end;

function TModules.GetCount: Integer;
begin
  result := List.Count;
end;

function TModules.IndexOf(const Name: String): Integer;
var
  Module: TModule;
  I: Integer;
begin
  result := -1;
  for I:=0 to List.Count - 1 do begin
    Module := TModule(List[I]);
    if StrEql(Name, Module.Name) then begin
      result := I;
      Exit;
    end;
  end;
end;

function TModules.Add(const Name: String): Integer;
var
  Module: TModule;
begin
  result := IndexOf(Name);
  if result <0 then Begin
     Module := TModule.Create;
     Module.Name := Name;
     Module.FileName := '';
     List.Add(Pointer(Module));
  End;
end;

constructor TJScript.Create(Owner: TComponent);
begin
  inherited create; // OZZ
  Self.Owner := Owner;
  Garbage := TGarbage.Create;
  StdDefinitionList := TDefinitionList.Create;
  StdDefinitionList.AddStandardRoutines;
  HostDefinitionList := TDefinitionList.Create;
  PropDefList := TPropDefList.Create;
  RemovePropList := TRemovePropList.Create;
  HostVariableList := THostVariableList.Create;
  ConstantList := TConstantList.Create;
  HostObjectList := THostObjectList.Create;
  HostConstructorList := THostConstructorList.Create;
  EventHandlerList := TEventHandlerList.Create;
  Modules := TModules.Create;
  Scanner := nil;
  Parser := TParser.Create(Self);
  Postfix := TPostfix.Create(Self);
  GlobalObject := TGlobalObject.Create(Self);
  GlobalObject.CreatePrototypes;
  SymbolTable := TSymbolTable.Create(Self);
  LineCount := 0;
  ZeroBasedStringIndex := true;
  ScriptState := ss_Initialization;
  OpenWindows := TList.Create;
end;

destructor TJScript.Destroy;
begin
  if Assigned(Garbage) then Garbage.Free;
  if Assigned(StdDefinitionList) then StdDefinitionList.Free;
  if Assigned(HostDefinitionList) then HostDefinitionList.Free;
  if Assigned(PropDefList) then PropDefList.Free;
  if Assigned(RemovePropList) then RemovePropList.Free;
  if Assigned(HostVariableList) then HostVariableList.Free;
  if Assigned(ConstantList) then ConstantList.Free;
  if Assigned(HostObjectList) then HostObjectList.Free;
  if Assigned(HostConstructorList) then HostConstructorList.Free;
  if Assigned(EventHandlerList) then EventHandlerList.Free;
  if Assigned(Modules) then Modules.Free;
  if Assigned(Parser) then Parser.Free;
  if Assigned(Postfix) then Postfix.Free;
//  if Assigned(GlobalObject) then GlobalObject.Free;
  if Assigned(SymbolTable) then SymbolTable.Free;
  if Assigned(Scanner) then Scanner.Free;
  if Assigned(OpenWindows) then OpenWindows.Free;
  inherited destroy; // OZZ
end;

procedure TJScript.Reset;
begin
  Garbage.Free;
  Garbage := TGarbage.Create;
//  if Assigned(GlobalObject) then GlobalObject.Free;
  GlobalObject := TGlobalObject.Create(Self);
  GlobalObject.CreatePrototypes;
  Modules.Free;
  Modules := TModules.Create;
  SymbolTable.Free;
  SymbolTable := TSymbolTable.Create(Self);
  Parser.Free;
  Parser := TParser.Create(Self);
  Postfix.Free;
  Postfix := TPostfix.Create(Self);
  LineCount := 0;
  ScriptState := ss_Initialization;
end;

function TJScript.AddModule(const ModuleName: String): Integer;
begin
  result := Modules.Add(ModuleName);
end;

procedure TJScript.AddCode(const ModuleName, Code: String);
var
  I: Integer;
  Module: TModule;
begin
  I := Modules.IndexOf(ModuleName);
  if I = -1 then begin
    Modules.Add(ModuleName);
    I := Modules.IndexOf(ModuleName);
  end;
  Module := TModule(Modules.List[I]);
  Module.Text := Module.Text + Code;
end;

procedure TJScript.AddCodeFromFile(const ModuleName, FileName: String);
var
  L: TStringList;
  I: Integer;
  Module: TModule;
begin
  if FileExists(FileName) then Begin
    L := TStringList.Create;
    try
      L.LoadFromFile(FileName);
      AddCode(ModuleName, L.Text);
      I := Modules.IndexOf(ModuleName);
      Module := TModule(Modules.List[I]);
      Module.FileName := FileName;
    finally
      L.Free;
    end;
  end;
end;

function TJScript.Eval(const Code: String): Variant;
var
  StartPos, LastOP, LastN: Integer;
  I, SymbolTableCard, SymbolTableMemBoundVar, {PostfixCard,}
  PostfixCurrBoundTable, PostfixCurrBoundStack,
  PostfixStackCard: Integer;
  ExtraCode: boolean;
  LastState: TScriptState;

begin
  StartPos := Postfix.Card;
  LastOP := PostFix.OP;
  LastN := PostFix.N;
  PostfixCurrBoundTable := Postfix.CurrBoundTable;
  PostfixCurrBoundStack := Postfix.CurrBoundStack;
  PostFixStackCard := Postfix.Stack.Card;
  SymbolTableCard := SymbolTable.Card;
  SymbolTableMemBoundVar := SymbolTable.MemBoundVar;
  SymbolTable.Card := SymbolTable.EvalCard;
  SymbolTable.MemBoundVar := SymbolTable.EvalMemBoundVar;
  if Postfix.CallStack.TopObject <> nil then
    Parser.CurrLevel := Postfix.CallStack.TopObject.SubID;
  Scanner := TScanner.Create(Self);
  Scanner.Buff := Code + ';' + #255;
  Parser.Call_SCANNER;
  result := Parser.Parse_Program;
  Scanner.Free;
  Scanner := nil;
  ExtraCode := false;
  for I:= SymbolTable.EvalCard + 1 to SymbolTable.Card do
    if SymbolTable.GetKind(I) = kind_is_SUB then ExtraCode := true;
  Parser.App_POSTFIX(OP_HALT);
  SymbolTable.EvalCard := SymbolTable.Card;
  SymbolTable.EvalMemBoundVar := SymbolTable.MemBoundVar;
  LastState := ScriptState;
  ScriptState := ss_Running;
  Inc(Postfix.EvalCount);
  Postfix.N := StartPos;
  PostFix.Run;
  Dec(Postfix.EvalCount);
  result := Postfix.EvalRes;
  if PostFix.Stack.Card > PostfixStackCard then result := Postfix.PopVariant;
  if VarType(result) = varScriptObject then begin
    result := VariantToScriptObject(result).DefaultValue;
  end;
  SymbolTable.EraseTail(SymbolTableCard);
  SymbolTable.MemBoundVar := SymbolTableMemBoundVar;
  Postfix.CurrBoundTable := PostfixCurrBoundTable;
  Postfix.CurrBoundStack := PostfixCurrBoundStack;
  PostFix.Stack.Card := PostfixStackCard;
  if not ExtraCode then Postfix.Card := StartPos;
  PostFix.OP := LastOP;
  PostFix.N := LastN;
  ScriptState := LastState;
end;

function TJScript.ParseModule(const I:Integer): boolean;
var
  Module: TModule;
begin
  Module := Modules[I];
  Parser.App_POSTFIX(BOUND_FILES - I);
  Parser.App_POSTFIX(BOUND_LINES - 0);
  Scanner := TScanner.Create(Self);
  Scanner.Buff := Module.Text + #255;
  Parser.Call_SCANNER;
  result := Parser.Parse_Program;
  Scanner.Free;
  Scanner := nil;
end;

function TJScript.Parse: boolean;
var
  I: Integer;
begin
  result := true;
  Postfix.BreakpointList.Clear;
  Postfix.Card := 0;
  Postfix.N := 0;
  SymbolTable.SetupHostDefinitions;
  Parser.App_POSTFIX(OP_START);
  ScriptState := ss_Compiling;
  for I:=0 to Modules.Count - 1 do begin
    result := result and ParseModule(I); //720 Modules[I].Name);
    if not result then begin
      if Assigned(fOnShowError) then fOnShowError(Error)
       else ShowError(Error);
       ScriptState := ss_Initialization;
       Exit;
    end;
  end;
  Parser.App_POSTFIX(OP_HALT);
  with SymbolTable do begin
    ParseCard := Card;

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
av成人免费在线| 亚洲精品成人少妇| 日韩视频一区二区在线观看| 日韩一卡二卡三卡四卡| 免费在线成人网| 岛国精品在线观看| 欧美日韩午夜在线| 精品三级在线观看| 亚洲三级在线免费观看| 性做久久久久久免费观看欧美| 久久 天天综合| 美日韩一区二区三区| 91色九色蝌蚪| 亚洲精品一区二区三区影院| 亚洲精选视频在线| 欧美色中文字幕| 亚洲欧洲精品天堂一级| 免费成人av资源网| ww久久中文字幕| 免费成人在线网站| 国产午夜精品一区二区三区四区| 日韩欧美色电影| 最新国产精品久久精品| 91欧美激情一区二区三区成人| 久久综合九色综合欧美98| 成人app在线观看| 国产亚洲自拍一区| 99精品欧美一区二区三区小说| 91影视在线播放| 亚洲精品精品亚洲| 欧美成人精精品一区二区频| 成人av动漫在线| 久久成人免费电影| 日韩欧美二区三区| www.综合网.com| 免费高清在线视频一区·| 国产精品国产自产拍在线| 国产一区二区三区免费| 日韩欧美国产不卡| 色诱视频网站一区| 亚洲人快播电影网| 在线观看日韩电影| 亚洲国产成人av网| 欧美群妇大交群的观看方式| 午夜精品久久久久久久99樱桃| 激情综合亚洲精品| 一区二区三区在线视频播放| 欧美亚洲动漫精品| 成人永久aaa| 国精产品一区一区三区mba桃花| 97精品电影院| 日本v片在线高清不卡在线观看| 日韩三级免费观看| 精品污污网站免费看| 99精品1区2区| 粉嫩13p一区二区三区| 亚洲日本va在线观看| 日韩精品专区在线影院重磅| 欧美网站一区二区| 91丨porny丨最新| 国产精品亚洲午夜一区二区三区| 欧美在线观看视频在线| 国产v综合v亚洲欧| 捆绑变态av一区二区三区| 午夜精品久久久久久久99樱桃| 欧美美女一区二区| 日本欧美韩国一区三区| 久久男人中文字幕资源站| av午夜精品一区二区三区| 国产精品99久久久久久久vr| 美女视频黄频大全不卡视频在线播放| 精品久久免费看| 日韩欧美成人激情| 欧美精品乱人伦久久久久久| 欧美私人免费视频| 欧美天天综合网| 91精品久久久久久久99蜜桃| 国产一区91精品张津瑜| 精品一区二区成人精品| 久久 天天综合| 国产精品一区二区无线| 韩国av一区二区| 国产一区二区精品久久99| 国产精品18久久久久久久久 | 亚洲精品五月天| 亚洲欧洲99久久| 亚洲激情五月婷婷| 亚洲国产欧美日韩另类综合| 亚洲国产成人av网| 精一区二区三区| 国产激情一区二区三区桃花岛亚洲 | 久久久国产精品不卡| 久久久噜噜噜久久中文字幕色伊伊| 99久久精品免费看国产免费软件| 日韩电影在线免费看| 免费成人av在线播放| 国产精品99久久久久久久vr| av一区二区久久| 欧美性色综合网| 欧美另类videos死尸| 亚洲精品一区二区三区精华液 | 天堂一区二区在线免费观看| 久久精品人人做人人综合| 国产亚洲欧洲997久久综合| 中文字幕亚洲精品在线观看| 一区二区在线观看视频在线观看| 日本一区二区在线不卡| 欧美日韩国产综合一区二区| 欧美一区二区网站| 欧美综合亚洲图片综合区| 欧美精品在线观看一区二区| 久久久蜜臀国产一区二区| 亚洲欧美成人一区二区三区| 日韩精品亚洲一区| 国产高清精品网站| 欧美伊人久久大香线蕉综合69| 成人18精品视频| 91精品久久久久久久久99蜜臂| 色综合色综合色综合| 日韩欧美在线一区二区三区| 中文字幕在线播放不卡一区| 午夜成人在线视频| 懂色av一区二区在线播放| 欧美在线观看视频在线| 精品国产乱码久久久久久久| 亚洲婷婷在线视频| 精品一区二区影视| 欧美系列在线观看| 国产精品网站在线观看| 中文字幕一区在线| 日韩电影免费一区| 91蜜桃网址入口| 久久―日本道色综合久久| 亚洲成人精品一区| 不卡av免费在线观看| 日韩免费成人网| 亚洲国产日产av| 成人毛片在线观看| 久久综合色8888| 五月天欧美精品| 一本大道久久a久久精二百| 国产女主播一区| 九一九一国产精品| 欧美精品日日鲁夜夜添| 尤物av一区二区| 成人高清视频免费观看| 久久久激情视频| 久久99久久99精品免视看婷婷 | 欧美精品自拍偷拍动漫精品| 中文字幕一区二| 国产成人免费在线视频| 日韩女优视频免费观看| 午夜伦欧美伦电影理论片| 欧美亚洲动漫精品| 最好看的中文字幕久久| 国产精品77777| 久久综合九色综合欧美98| 久草这里只有精品视频| 日韩欧美中文字幕公布| 老司机免费视频一区二区 | 免费人成黄页网站在线一区二区 | 亚洲午夜三级在线| 日本久久一区二区| 欧美韩国日本一区| 亚洲视频图片小说| 99久久婷婷国产综合精品电影 | 日韩精品亚洲专区| 欧美亚洲日本国产| 一级做a爱片久久| 一本色道a无线码一区v| 亚洲男人天堂一区| 色吊一区二区三区| 亚洲一区二区在线观看视频| 久久国产夜色精品鲁鲁99| 正在播放亚洲一区| 久久精品久久综合| 久久综合久久久久88| 国产剧情av麻豆香蕉精品| 国产欧美一区二区三区沐欲| 成人一级片网址| 亚洲色大成网站www久久九九| 精品一区二区三区免费播放| 精品国产免费久久| 国产精品 日产精品 欧美精品| 欧洲精品中文字幕| 日韩不卡免费视频| 26uuu精品一区二区在线观看| 夜夜精品视频一区二区 | 欧美丰满少妇xxxbbb| 麻豆91免费看| 国产午夜精品一区二区三区嫩草 | 久久福利视频一区二区| 欧美精品一区二区三区在线| 国产精品99久久久久| 亚洲精品日日夜夜| 欧美一级片在线| 成人动漫一区二区| 亚洲成av人片一区二区梦乃| 欧美mv和日韩mv的网站| av中文字幕不卡|