⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 jsexec.cpp

📁 PIXIL is a small footprint operating environment, complete with PDA PIM applications, a browser and
💻 CPP
字号:
/* This file is part of the KDE libraries    Copyright (C) 1997 Torben Weis (weis@kde.org)    This library is free software; you can redistribute it and/or    modify it under the terms of the GNU Library General Public    License as published by the Free Software Foundation; either    version 2 of the License, or (at your option) any later version.    This library is distributed in the hope that it will be useful,    but WITHOUT ANY WARRANTY; without even the implied warranty of    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU    Library General Public License for more details.    You should have received a copy of the GNU Library General Public License    along with this library; see the file COPYING.LIB.  If not, write to    the Free Software Foundation, Inc., 59 Temple Place - Suite 330,    Boston, MA 02111-1307, USA.*/#include "jsexec.h"#include "jstree.h"#include "builtin.h"#include <stdio.h>/********************************************************** * * JSIntegerObject * *********************************************************/JSIntegerObject::JSIntegerObject( int _i ) : JSObject(){    value = _i;}/********************************************************** * * JSBoolObject * *********************************************************/JSBoolObject::JSBoolObject( bool _i ) : JSObject(){    value = _i;}/********************************************************** * * JSFloatObject * *********************************************************/JSFloatObject::JSFloatObject( double _i ) : JSObject(){    value = _i;}/********************************************************** * * JSStringObject * *********************************************************/JSStringObject::JSStringObject( const char *_string ){    string = _string;}/********************************************************** * * JSVariableObject * *********************************************************/JSVariableObject::JSVariableObject() : JSObject(){    value = 0L;    bConst = FALSE;    bDynamic = FALSE;}void JSVariableObject::clear(){    if ( bConst )	return;    if ( value )	value->release();    value = 0L;}JSVariableObject::~JSVariableObject(){    if ( value )	delete value;}/********************************************************** * * JSFunctionObject * *********************************************************/JSFunctionObject::JSFunctionObject( JSFunction * _func ) : JSObject(){    function = _func;    object = 0L;}const char* JSFunctionObject::getName(){    if ( function )	return function->getName();    else	return 0L;}/********************************************************** * * JSParameterListObject * *********************************************************/JSParameterListObject::JSParameterListObject() : JSObject(){    parameterValues.setAutoDelete( TRUE );}/********************************************************** * * JSUserDefinedObject * *********************************************************/JSUserDefinedObject::JSUserDefinedObject(){    scope.setObject( this );    lock = 1;}/********************************************************** * * JSValue * *********************************************************/JSValue::JSValue(){    object = 0L;    bAutoDelete = FALSE;    bLeftValue = FALSE;}JSValue::~JSValue(){    if ( bAutoDelete && object ) object->release(); }void JSValue::setObject( JSObject *_o ){    if ( object && bAutoDelete )	object->release();    object = _o;}/********************************************************** * * JSScope * *********************************************************/JSScope::JSScope(){    objectList.setAutoDelete( TRUE );}  void JSScope::insertObject( JSObject* _obj ){    objectList.append( _obj );}JSVariableObject* JSScope::findVariable( const char *_name ){    JSObject *obj;        for ( obj = objectList.first(); obj != 0L; obj = objectList.next() )    {	if ( obj->inherits( TYPE_JSVariableObject ) )	{	    JSVariableObject *var = (JSVariableObject*) obj;	    if ( strcmp( var->getName(), _name ) == 0L )		return var;	}    }        return 0L;}JSFunctionObject* JSScope::findFunction( const char *_name ){    JSObject *obj;        for ( obj = objectList.first(); obj != 0L; obj = objectList.next() )    {	if ( obj->inherits( TYPE_JSFunctionObject ) )	{	    JSFunctionObject *func = (JSFunctionObject*) obj;	    if ( strcmp( func->getName(), _name ) == 0L )		return func;	}    }        return 0L;}/********************************************************** * * JSScopeStack * *********************************************************/JSScopeStack::JSScopeStack( JSScope *_globalScope, JSInstanceScope *_instanceScope ){    globalScope = _globalScope;        scopeList.setAutoDelete( TRUE );    scopeList.append( _globalScope );    instanceScopeStack.setAutoDelete( FALSE );    if ( _instanceScope )	instanceScopeStack.push( _instanceScope );}JSScopeStack::~JSScopeStack(){    // Remove the global scope without deleting it    if ( globalScope )    {	scopeList.setAutoDelete( FALSE );	scopeList.removeRef( globalScope );	scopeList.setAutoDelete( TRUE );    }}JSVariableObject* JSScopeStack::findVariable( const char *_name, bool _top_only ){    JSVariableObject *var;    JSScope *scope;        if ( _top_only )	return scopeList.getLast()->findVariable( _name );        for ( scope = scopeList.last(); scope != 0L; scope = scopeList.prev() )    {	var = scope->findVariable( _name );	if ( var != 0L )	    return var;    }        return 0L;}JSFunctionObject* JSScopeStack::findFunction( const char *_name ){    JSFunctionObject *func;    JSScope *scope;        for ( scope = scopeList.last(); scope != 0L; scope = scopeList.prev() )    {	func = scope->findFunction( _name );	if ( func != 0L )	    return func;    }    return 0L;}void JSScopeStack::pushScope( JSScope* _scope ){    scopeList.append( _scope );}void JSScopeStack::popScope(){    JSScope *s = scopeList.getLast();    if ( s )	scopeList.removeRef( s );}JSScope* JSScopeStack::topScope(){    return scopeList.getLast();}void JSScopeStack::pushInstanceScope( JSInstanceScope* _scope ){    instanceScopeStack.push( _scope );}void JSScopeStack::popInstanceScope(){    instanceScopeStack.pop();}JSInstanceScope* JSScopeStack::topInstanceScope(){    return instanceScopeStack.top();}/********************************************************** * * execJavaScript * *********************************************************/int execJavaScript( JSCode *_code, JSScope *_global, JSInstanceScope *_instanceScope ){    int ret;        /* JSScope *global = new JSScope();    initBuiltin( global );        if ( _builtin != 0L )	_builtin( global ); */        JSScopeStack scopes( _global, _instanceScope );        JSValue rv;        /* JSNode *c;    for ( c = _code->first(); c != 0L; c = _code->next() )    {	if ( c->isA() == ID_JSFunction )	{	    JSFunction *func = (JSFunction*)c;	    global->insertObject( new JSFunctionObject( func ) );	}    } */        JSNode *c;    for ( c = _code->first(); c != 0L; c = _code->next() )    {	printf("Exec '%i'\n",c->isA());		ret = c->rightValue( &scopes, &rv );	if ( ret )	    return ret;    }    return 0;}/********************************************************** * * makeGlobalScope * *********************************************************/JSScope* makeGlobalScope(){    JSScope *global = new JSScope();    initBuiltin( global );    return global;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -