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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? 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;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
91福利视频久久久久| 亚洲少妇30p| 中文字幕av一区二区三区高| 一二三区精品福利视频| 国产91色综合久久免费分享| 日本韩国一区二区三区视频| 日韩欧美一区在线| 亚洲欧美一区二区三区孕妇| 精品一区二区三区视频在线观看| 99久久精品免费精品国产| 欧美一区二区在线观看| 玉足女爽爽91| 成人午夜视频在线观看| 久久影音资源网| 天堂va蜜桃一区二区三区| 91亚洲永久精品| 中文字幕+乱码+中文字幕一区| 免费在线观看成人| 欧美三级视频在线播放| 亚洲免费观看视频| hitomi一区二区三区精品| 久久精品视频免费| 国产精品中文有码| 日韩你懂的电影在线观看| 偷偷要91色婷婷| 久久一夜天堂av一区二区三区| 亚洲综合精品自拍| 色婷婷精品久久二区二区蜜臀av | 精品一区二区三区视频| 欧美高清视频在线高清观看mv色露露十八 | 成人av先锋影音| 久久久久久久综合| 国产剧情一区二区三区| 精品国产一二三区| 国产在线看一区| 久久久久久麻豆| 国产成人精品午夜视频免费| 国产欧美一区二区三区在线看蜜臀| 国产老妇另类xxxxx| 久久九九国产精品| 不卡的电影网站| 中文字幕一区二区视频| 91免费在线视频观看| 亚洲精品乱码久久久久久久久| 91片在线免费观看| 午夜激情久久久| 精品国产亚洲在线| 国产成人亚洲综合a∨猫咪| 国产日韩综合av| 91丨porny丨首页| 一个色妞综合视频在线观看| 欧美男男青年gay1069videost | 综合网在线视频| 色噜噜久久综合| 奇米在线7777在线精品| 久久99九九99精品| 欧美精品123区| 久久久无码精品亚洲日韩按摩| 激情六月婷婷久久| 日本一区二区不卡视频| 色综合视频在线观看| 亚洲国产精品久久人人爱| 7777精品伊人久久久大香线蕉完整版 | 青娱乐精品视频| 精品电影一区二区| av一区二区久久| 水野朝阳av一区二区三区| 26uuu精品一区二区在线观看| 国产成人免费xxxxxxxx| 亚洲一区二区四区蜜桃| 一区二区三区中文在线观看| 91精品国产综合久久蜜臀| 国产精品一区二区无线| 亚洲摸摸操操av| 欧美成人女星排名| 一本久道久久综合中文字幕| 蜜臀a∨国产成人精品| 中文字幕免费一区| 777午夜精品视频在线播放| 成人精品视频一区| 青娱乐精品视频| 亚洲区小说区图片区qvod| 精品国产乱码久久久久久久 | 精品一区二区在线观看| 亚洲精品国产一区二区精华液 | 欧美日韩免费高清一区色橹橹| 国产一区二区三区电影在线观看| 一级精品视频在线观看宜春院| 久久麻豆一区二区| 777欧美精品| 欧美系列亚洲系列| 成人激情av网| 精品一区二区久久| 日日噜噜夜夜狠狠视频欧美人 | 亚洲国产精品久久久男人的天堂| 久久久久久久久97黄色工厂| 69堂亚洲精品首页| 一本大道久久精品懂色aⅴ| 国产精品综合一区二区三区| 日本一不卡视频| 亚洲黄色性网站| 国产精品色哟哟网站| 国产亚洲婷婷免费| 欧美一区二区三区四区在线观看| 色噜噜狠狠成人中文综合| 国产成人高清在线| 激情综合网最新| 黑人巨大精品欧美黑白配亚洲| 天天色综合成人网| 香蕉影视欧美成人| 一区二区三区四区高清精品免费观看 | 日韩女优视频免费观看| 中文字幕的久久| 精品少妇一区二区三区免费观看 | 欧美一级生活片| 欧美日本一区二区三区| 日本韩国一区二区三区| 色综合久久88色综合天天免费| 91视频在线观看| 色婷婷国产精品综合在线观看| 99精品黄色片免费大全| 91美女精品福利| 欧美中文字幕久久| 欧美片网站yy| 日韩午夜在线播放| 久久久久国产精品厨房| 国产女人aaa级久久久级| 国产精品嫩草影院av蜜臀| 中文字幕高清不卡| 亚洲免费色视频| 亚洲成人自拍一区| 奇米777欧美一区二区| 久久er精品视频| 久久99国产精品成人| 国产成人免费在线观看不卡| 国产成人精品午夜视频免费| 99视频精品免费视频| 欧美羞羞免费网站| 91精品国产乱码| 久久这里只有精品视频网| 国产精品久久久久久久久图文区| 亚洲日本在线a| 日韩精品亚洲一区二区三区免费| 六月丁香综合在线视频| 粉嫩欧美一区二区三区高清影视| 不卡一区二区中文字幕| 精品视频免费在线| 久久综合久久综合九色| 亚洲欧美一区二区三区久本道91| 日韩影视精彩在线| 国产不卡视频一区二区三区| 欧美在线不卡一区| 337p粉嫩大胆噜噜噜噜噜91av| 国产精品国产a| 日本sm残虐另类| 99国产精品视频免费观看| 91精品黄色片免费大全| 国产精品乱子久久久久| 亚洲国产成人高清精品| 国产成人免费在线| 91麻豆精品国产91久久久久 | 精品欧美乱码久久久久久| 中文字幕亚洲一区二区av在线| 日韩中文字幕一区二区三区| 国产米奇在线777精品观看| 欧美在线免费观看亚洲| 久久女同性恋中文字幕| 亚洲成a人片综合在线| 成人性生交大片| 日韩欧美不卡在线观看视频| 一区二区三区四区激情| 成人国产精品免费| 日韩欧美久久久| 五月婷婷激情综合网| 99国产精品一区| 国产拍揄自揄精品视频麻豆| 男男gaygay亚洲| 色婷婷av一区二区三区软件 | 波多野结衣91| 久久伊99综合婷婷久久伊| 婷婷开心久久网| 91福利国产精品| 亚洲欧洲精品一区二区三区不卡 | 99re成人在线| 国产欧美精品在线观看| 美女视频黄久久| 欧美日韩黄视频| 亚洲一区二区欧美| 色欧美片视频在线观看在线视频| 久久久久免费观看| 成人av小说网| 国产精品麻豆网站| 国产精品2024| 欧美日韩夫妻久久| 亚洲激情一二三区| 欧美手机在线视频| 亚洲一级二级三级| 欧美日韩中文国产| 午夜精品视频在线观看| 在线播放欧美女士性生活|