1
0
mirror of https://github.com/samba-team/samba.git synced 2025-02-04 17:47:26 +03:00

r8333: merged with latest upstream ejs sources

(This used to be commit b0f9ddafe95d4e8d846bc72a39e94d22da271348)
This commit is contained in:
Andrew Tridgell 2005-07-11 22:40:32 +00:00 committed by Gerald (Jerry) Carter
parent 3e5649f79f
commit ba1ee57df4
13 changed files with 93 additions and 70 deletions

View File

@ -2,7 +2,7 @@
# Start SUBSYSTEM EJS
[SUBSYSTEM::EJS]
ADD_OBJ_FILES = \
lib/ejs/ejs.o \
lib/ejs/ejsLib.o \
lib/ejs/ejsLex.o \
lib/ejs/ejsParser.o \
lib/ejs/ejsProcs.o \

View File

@ -44,8 +44,8 @@
#ifndef _h_EJS
#define _h_EJS 1
#include "lib/ejs/miniMpr.h"
#include "lib/ejs/var.h"
#include "miniMpr.h"
#include "var.h"
#ifdef __cplusplus
extern "C" {
@ -75,7 +75,7 @@ extern void ejsCloseEngine(EjsId eid);
* Evaluation functions
*/
extern int ejsEvalFile(EjsId eid, char *path, MprVar *result, char **emsg);
extern int ejsEvalScript(EjsId eid, char *script, MprVar *result,
extern int ejsEvalScript(EjsId eid, char *script, MprVar *result,
char **emsg);
extern int ejsRunFunction(int eid, MprVar *obj, const char *functionName,
MprArray *args);
@ -87,7 +87,8 @@ extern int ejsRunFunction(int eid, MprVar *obj, const char *functionName,
extern MprVar ejsCreateObj(const char *name, int hashSize);
extern MprVar ejsCreateArray(const char *name, int hashSize);
extern bool ejsDestroyVar(MprVar *obj);
extern int ejsCopyVar(EjsId eid, const char *var, MprVar *value, bool copyRef);
extern int ejsCopyVar(EjsId eid, const char *var, MprVar *value,
bool copyRef);
extern int ejsReadVar(EjsId eid, const char *var, MprVar *value);
extern int ejsWriteVar(EjsId eid, const char *var, MprVar *value);
extern int ejsWriteVarValue(EjsId eid, const char *var, MprVar value);
@ -99,8 +100,8 @@ extern MprVar *ejsGetGlobalObject(EjsId eid);
/*
* Function routines
*/
extern void ejsDefineFunction(EjsId eid, const char *functionName, char *args,
char *body);
extern void ejsDefineFunction(EjsId eid, const char *functionName,
char *args, char *body);
extern void ejsDefineCFunction(EjsId eid, const char *functionName,
MprCFunction fn, void *thisPtr, int flags);
extern void ejsDefineStringCFunction(EjsId eid, const char *functionName,
@ -109,7 +110,8 @@ extern void *ejsGetThisPtr(EjsId eid);
extern MprVar *ejsGetReturnValue(EjsId eid);
extern int ejsGetLineNumber(EjsId eid);
extern int ejsParseArgs(int argc, char **argv, char *fmt, ...);
extern void ejsSetErrorMsg(EjsId eid, const char* fmt, ...) PRINTF_ATTRIBUTE(2,3);
extern void ejsSetErrorMsg(EjsId eid, const char* fmt, ...)
PRINTF_ATTRIBUTE(2,3);
extern void ejsSetReturnValue(EjsId eid, MprVar value);
extern void ejsSetReturnString(EjsId eid, const char *str);

View File

@ -39,7 +39,7 @@
#ifndef _h_EJS_INTERNAL
#define _h_EJS_INTERNAL 1
#include "lib/ejs/ejs.h"
#include "ejs.h"
/********************************** Defines ***********************************/
@ -253,7 +253,8 @@ extern void ejsLexPutbackToken(Ejs* ep, int tid, char *string);
/*
* Parsing
*/
extern MprVar *ejsFindObj(Ejs *ep, int state, const char *property, int flags);
extern MprVar *ejsFindObj(Ejs *ep, int state, const char *property,
int flags);
extern MprVar *ejsFindProperty(Ejs *ep, int state, MprVar *obj,
char *property, int flags);
extern int ejsGetVarCore(Ejs *ep, const char *var, MprVar **obj,

View File

@ -36,7 +36,7 @@
*/
/********************************** Includes **********************************/
#include "lib/ejs/ejsInternal.h"
#include "ejsInternal.h"
#if BLD_FEATURE_EJS
@ -439,6 +439,9 @@ static int getLexicalToken(Ejs *ep, int state)
*/
while (1) {
if ((c = inputGetc(ep)) < 0) {
if (style == '/') {
return EJS_TOK_EOF;
}
ejsError(ep, "Syntax Error");
return EJS_TOK_ERR;
}

View File

@ -35,7 +35,7 @@
*/
/********************************** Includes **********************************/
#include "lib/ejs/ejsInternal.h"
#include "ejsInternal.h"
#if BLD_FEATURE_EJS
@ -275,11 +275,11 @@ int ejsEvalFile(EjsId eid, char *path, MprVar *result, char **emsg)
if ((script = (char*) mprMalloc(sbuf.st_size + 1)) == NULL) {
close(fd);
ejsError(ep, "Cant malloc %d", (int)sbuf.st_size);
ejsError(ep, "Cant malloc %d", (int) sbuf.st_size);
goto error;
}
if (read(fd, script, sbuf.st_size) != (int)sbuf.st_size) {
if (read(fd, script, sbuf.st_size) != (int) sbuf.st_size) {
close(fd);
mprFree(script);
ejsError(ep, "Error reading %s", path);
@ -468,7 +468,8 @@ int ejsEvalScript(EjsId eid, char *script, MprVar *vp, char **emsg)
* Core error handling
*/
static void ejsErrorCore(Ejs* ep, const char *fmt, va_list args) PRINTF_ATTRIBUTE(2, 0);
static void ejsErrorCore(Ejs* ep, const char *fmt, va_list args)
PRINTF_ATTRIBUTE(2, 0);
static void ejsErrorCore(Ejs* ep, const char *fmt, va_list args)
{
@ -795,7 +796,8 @@ void ejsDefineStringCFunction(EjsId eid, const char *functionName,
* Body should not contain braces.
*/
void ejsDefineFunction(EjsId eid, const char *functionName, char *args, char *body)
void ejsDefineFunction(EjsId eid, const char *functionName, char *args,
char *body)
{
MprVar v;
@ -831,8 +833,8 @@ void *ejsGetThisPtr(EjsId eid)
* indicies. Returns -1 on errors or if the variable is not found.
*/
int ejsGetVarCore(Ejs *ep, const char *varName_c, MprVar **obj, MprVar **varValue,
int flags)
int ejsGetVarCore(Ejs *ep, const char *vname, MprVar **obj,
MprVar **varValue, int flags)
{
MprVar *currentObj;
MprVar *currentVar;
@ -845,12 +847,11 @@ int ejsGetVarCore(Ejs *ep, const char *varName_c, MprVar **obj, MprVar **varValu
if (varValue) {
*varValue = 0;
}
currentObj = ejsFindObj(ep, 0, varName_c, flags);
currentObj = ejsFindObj(ep, 0, vname, flags);
currentVar = 0;
propertyName = 0;
varName = mprStrdup(varName_c);
next = varName;
next = varName = mprStrdup(vname);
token = getNextVarToken(&next, tokBuf, sizeof(tokBuf));

View File

@ -35,7 +35,7 @@
/********************************** Includes **********************************/
#include "lib/ejs/ejsInternal.h"
#include "ejsInternal.h"
#if BLD_FEATURE_EJS
@ -1128,9 +1128,11 @@ static int parseFunctionDec(Ejs *ep, int state, int flags)
mprDestroyVar(&v);
return EJS_STATE_ERR;
}
/* register the function name early to allow for recursive
function calls (see note in ECMA standard, page 71) */
/*
* Register the function name early to allow for recursive
* function calls (see note in ECMA standard, page 71)
*/
if (!(flags & EJS_FLAGS_ASSIGNMENT)) {
currentObj = ejsFindObj(ep, 0, procName, flags);
vp = mprSetProperty(currentObj, procName, &v);
@ -2127,7 +2129,8 @@ static int evalFunction(Ejs *ep, MprVar *obj, int flags)
* Run a function
*/
int ejsRunFunction(int eid, MprVar *obj, const char *functionName, MprArray *args)
int ejsRunFunction(int eid, MprVar *obj, const char *functionName,
MprArray *args)
{
EjsProc proc, *saveProc;
Ejs *ep;
@ -2284,7 +2287,8 @@ static void appendValue(MprVar *dest, MprVar *src)
oldLen = strlen(oldBuf);
buf = mprRealloc(oldBuf, (len + oldLen + 1) * sizeof(char));
dest->string = buf;
strncpy(&buf[oldLen], value, len+1);
strcpy(&buf[oldLen], value);
} else {
*dest = mprCreateStringVar(value, 1);
}

View File

@ -34,7 +34,7 @@
*/
/********************************** Includes **********************************/
#include "lib/ejs/ejsInternal.h"
#include "ejsInternal.h"
#if BLD_FEATURE_EJS

View File

@ -44,7 +44,7 @@
/********************************** Includes **********************************/
#include "lib/ejs/var.h"
#include "var.h"
/*********************************** Locals ***********************************/
#if VAR_DEBUG
@ -344,7 +344,8 @@ MprType mprGetVarType(MprVar *vp)
* already exists in the object, then just write its value.
*/
MprVar *mprCreateProperty(MprVar *obj, const char *propertyName, MprVar *newValue)
MprVar *mprCreateProperty(MprVar *obj, const char *propertyName,
MprVar *newValue)
{
MprVar *prop, *last;
int bucketIndex;
@ -376,7 +377,7 @@ MprVar *mprCreateProperty(MprVar *obj, const char *propertyName, MprVar *newValu
}
if (prop) {
/* FUTURE -- remove. Just for debug. */
/* FUTURE -- remove. Just for debug. */
mprAssert(prop == 0);
mprLog(0, "Attempting to create property %s in object %s\n",
propertyName, obj->name);
@ -428,7 +429,8 @@ MprVar *mprCreateProperty(MprVar *obj, const char *propertyName, MprVar *newValu
* by pointer.
*/
MprVar *mprCreatePropertyValue(MprVar *obj, const char *propertyName, MprVar newValue)
MprVar *mprCreatePropertyValue(MprVar *obj, const char *propertyName,
MprVar newValue)
{
return mprCreateProperty(obj, propertyName, &newValue);
}
@ -513,7 +515,8 @@ MprVar *mprSetProperty(MprVar *obj, const char *propertyName, MprVar *newValue)
* new value is passed by value rather than by pointer.
*/
MprVar *mprSetPropertyValue(MprVar *obj, const char *propertyName, MprVar newValue)
MprVar *mprSetPropertyValue(MprVar *obj, const char *propertyName,
MprVar newValue)
{
return mprSetProperty(obj, propertyName, &newValue);
}
@ -602,7 +605,7 @@ MprVar *mprGetProperty(MprVar *obj, const char *property, MprVar *value)
for (prop = getObjChain(obj->properties, property); prop;
prop = prop->forw) {
if (prop->name &&
if (prop->name &&
prop->name[0] == property[0] && strcmp(prop->name, property) == 0) {
break;
}
@ -1170,7 +1173,8 @@ MprVar mprCreateCFunctionVar(MprCFunction fn, void *thisPtr, int flags)
* Initialize a C function.
*/
MprVar mprCreateStringCFunctionVar(MprStringCFunction fn, void *thisPtr, int flags)
MprVar mprCreateStringCFunctionVar(MprStringCFunction fn, void *thisPtr,
int flags)
{
MprVar v;
@ -1183,13 +1187,14 @@ MprVar mprCreateStringCFunctionVar(MprStringCFunction fn, void *thisPtr, int fla
return v;
}
/******************************************************************************/
/*
* Initialize an opaque pointer.
* Initialize an opaque pointer.
*/
MprVar mprCreatePtrVar(void *ptr, const char *name)
MprVar mprCreatePtrVar(void *ptr)
{
MprVar v;
MprVar v;
memset(&v, 0x0, sizeof(v));
v.type = MPR_TYPE_PTR;
@ -1356,7 +1361,7 @@ MprVar mprCreateStringVar(const char *value, bool allocate)
v.string = mprStrdup(value);
v.allocatedData = 1;
} else {
v.string = value;
v.string = (char*) value;
}
return v;
}
@ -1410,14 +1415,14 @@ static void copyVarCore(MprVar *dest, MprVar *src, int copyDepth)
dest->boolean = src->boolean;
break;
case MPR_TYPE_STRING_CFUNCTION:
dest->cFunctionWithStrings = src->cFunctionWithStrings;
break;
case MPR_TYPE_PTR:
dest->ptr = src->ptr;
break;
case MPR_TYPE_STRING_CFUNCTION:
dest->cFunctionWithStrings = src->cFunctionWithStrings;
break;
case MPR_TYPE_CFUNCTION:
dest->cFunction = src->cFunction;
break;
@ -1617,6 +1622,10 @@ void mprVarToString(char** out, int size, char *fmt, MprVar *obj)
*out = mprStrdup("null");
break;
case MPR_TYPE_PTR:
mprAllocSprintf(out, size, "[Opaque Pointer %p]", obj->ptr);
break;
case MPR_TYPE_BOOL:
if (obj->boolean) {
*out = mprStrdup("true");
@ -1665,16 +1674,12 @@ void mprVarToString(char** out, int size, char *fmt, MprVar *obj)
mprAllocSprintf(out, size, "[C StringFunction]");
break;
case MPR_TYPE_PTR:
mprAllocSprintf(out, size, "[C Pointer: %p]", obj->ptr);
break;
case MPR_TYPE_FUNCTION:
mprAllocSprintf(out, size, "[JavaScript Function]");
break;
case MPR_TYPE_OBJECT:
/* FUTURE -- really want: [object class: name] */
/* FUTURE -- really want: [object class: name] */
mprAllocSprintf(out, size, "[object %s]", obj->name);
break;
@ -1753,6 +1758,7 @@ MprVar mprParseVar(char *buf, MprType preferredType)
case MPR_TYPE_OBJECT:
case MPR_TYPE_UNDEFINED:
case MPR_TYPE_NULL:
case MPR_TYPE_PTR:
default:
break;
@ -2157,7 +2163,7 @@ bool mprIsNan(double f)
#if WIN
return _isnan(f);
#elif VXWORKS
/* FUTURE */
/* FUTURE */
return (0);
#else
return (f == FP_NAN);
@ -2170,7 +2176,7 @@ bool mprIsInfinite(double f)
#if WIN
return !_finite(f);
#elif VXWORKS
/* FUTURE */
/* FUTURE */
return (0);
#else
return (f == FP_INFINITE);

View File

@ -56,7 +56,7 @@
/********************************* Includes ***********************************/
#include "lib/ejs/miniMpr.h"
#include "miniMpr.h"
/********************************** Defines ***********************************/
@ -92,7 +92,7 @@ typedef int MprType;
#define MPR_TYPE_FUNCTION 8 /* JavaScript function */
#define MPR_TYPE_STRING 9 /* String (immutable) */
#define MPR_TYPE_STRING_CFUNCTION 10 /* C/C++ function with string args */
#define MPR_TYPE_PTR 11 /* C pointer */
#define MPR_TYPE_PTR 11 /* Opaque pointer */
/*
* Create a type for the default number type
@ -140,7 +140,7 @@ typedef BLD_FEATURE_NUM_TYPE MprNum;
#define mprVarIsFloating(type) \
(type == MPR_TYPE_FLOAT)
#define mprVarIsPtr(type) \
(type == MPR_TYPE_PTR)
(type == MPR_TYPE_PTR)
#define mprVarIsUndefined(var) \
((var)->type == MPR_TYPE_UNDEFINED)
#define mprVarIsNull(var) \
@ -252,9 +252,12 @@ typedef struct MprProperties { /* Collection of properties */
#endif
struct MprVar **buckets; /* Hash chains */
int numItems; /* Total count of items */
/* FUTURE - Better way of doing this */
int numDataItems; /* Enumerable data items */
uint hashSize : 8; /* Size of the hash table */
/* FUTURE -- increase size of refCount */
uint refCount : 8; /* References to this property*/
/* FUTURE - make these flags */
uint deleteProtect : 8; /* Don't recursively delete */
uint visited : 8; /* Node has been processed */
} MprProperties;
@ -263,8 +266,11 @@ typedef struct MprProperties { /* Collection of properties */
* Universal Variable Type
*/
typedef struct MprVar {
/* FUTURE - remove name to outside reference */
MprStr name; /* Property name */
/* FUTURE - remove */
MprStr fullName; /* Full object name */
/* FUTURE - make part of the union */
MprProperties *properties; /* Pointer to properties */
/*
@ -318,7 +324,7 @@ typedef struct MprVar {
void *thisPtr;
} cFunctionWithStrings;
MprStr string; /* Allocated string */
void *ptr; /* C pointer */
void *ptr; /* Opaque pointer */
#if !BLD_DEBUG && !LINUX && !VXWORKS
};
#endif
@ -355,7 +361,6 @@ extern MprVar mprCreateObjVar(const char *name, int hashSize);
extern MprVar mprCreateBoolVar(bool value);
extern MprVar mprCreateCFunctionVar(MprCFunction fn, void *thisPtr,
int flags);
extern MprVar mprCreatePtrVar(void *ptr, const char *name);
#if BLD_FEATURE_FLOATING_POINT
extern MprVar mprCreateFloatVar(double value);
#endif
@ -370,6 +375,7 @@ extern MprVar mprCreateStringCFunctionVar(MprStringCFunction fn,
void *thisPtr, int flags);
extern MprVar mprCreateStringVar(const char *value, bool allocate);
extern MprVar mprCreateUndefinedVar(void);
extern MprVar mprCreatePtrVar(void *ptr);
extern bool mprDestroyVar(MprVar *vp);
extern bool mprDestroyAllVars(MprVar* vp);
extern MprType mprGetVarType(MprVar *vp);
@ -404,9 +410,12 @@ extern int mprDeleteProperty(MprVar *obj, const char *property);
/*
* Get/Set properties. Set will update/create.
*/
extern MprVar *mprGetProperty(MprVar *obj, const char *property, MprVar *value);
extern MprVar *mprSetProperty(MprVar *obj, const char *property, MprVar *value);
extern MprVar *mprSetPropertyValue(MprVar *obj, const char *property, MprVar value);
extern MprVar *mprGetProperty(MprVar *obj, const char *property,
MprVar *value);
extern MprVar *mprSetProperty(MprVar *obj, const char *property,
MprVar *value);
extern MprVar *mprSetPropertyValue(MprVar *obj, const char *property,
MprVar value);
/*
* Directly read/write property values (the property must already exist)

View File

@ -284,7 +284,7 @@ NTSTATUS ejs_push_GUID(struct ejs_rpc *ejs,
NTSTATUS ejs_push_null(struct ejs_rpc *ejs, struct MprVar *v, const char *name)
{
return mprSetVar(v, name, mprCreatePtrVar(NULL, name));
return mprSetVar(v, name, mprCreatePtrVar(NULL));
}
BOOL ejs_pull_null(struct ejs_rpc *ejs, struct MprVar *v, const char *name)

View File

@ -128,7 +128,7 @@ struct MprVar mprList(const char *name, const char **list)
struct MprVar mprString(const char *s)
{
if (s == NULL) {
return mprCreatePtrVar(NULL, "NULL");
return mprCreatePtrVar(NULL);
}
return mprCreateStringVar(s, 1);
}
@ -289,7 +289,7 @@ struct MprVar mprWERROR(WERROR status)
*/
void mprSetPtr(struct MprVar *v, const char *propname, const void *p)
{
mprSetVar(v, propname, mprCreatePtrVar(discard_const(p), NULL));
mprSetVar(v, propname, mprCreatePtrVar(discard_const(p)));
}
/*
@ -297,7 +297,7 @@ void mprSetPtr(struct MprVar *v, const char *propname, const void *p)
*/
void mprSetPtrChild(struct MprVar *v, const char *propname, const void *p)
{
mprSetVar(v, propname, mprCreatePtrVar(discard_const(p), NULL));
mprSetVar(v, propname, mprCreatePtrVar(discard_const(p)));
talloc_steal(mprGetProperty(v, propname, NULL), p);
}

View File

@ -86,8 +86,7 @@ static int ejs_cli_connect(MprVarHandle eid, int argc, char **argv)
/* Return a socket object */
mpr_Return(eid, mprCreatePtrVar(transport,
talloc_get_name(transport)));
mpr_Return(eid, mprCreatePtrVar(transport));
return 0;
}
@ -214,8 +213,7 @@ static int ejs_cli_ssetup(MprVarHandle eid, int argc, MprVar **argv)
/* Return a session object */
mpr_Return(eid, mprCreatePtrVar(session,
talloc_get_name(session)));
mpr_Return(eid, mprCreatePtrVar(session));
result = 0;
@ -297,8 +295,7 @@ static int ejs_cli_tree_connect(MprVarHandle eid, int argc, MprVar **argv)
talloc_free(mem_ctx);
mpr_Return(eid, mprCreatePtrVar(tree,
talloc_get_name(tree)));
mpr_Return(eid, mprCreatePtrVar(tree));
return 0;
}
@ -446,7 +443,7 @@ static int ejs_tree_connect(MprVarHandle eid, int argc, char **argv)
return 0;
}
mpr_Return(eid, mprCreatePtrVar(tree, talloc_get_name(tree)));
mpr_Return(eid, mprCreatePtrVar(tree));
return 0;
}

View File

@ -412,7 +412,7 @@ void smb_setup_ejs_rpc_constants(int eid)
r->constants(eid);
}
v = mprCreatePtrVar(NULL, "NULL");
v = mprCreatePtrVar(NULL);
mprSetProperty(ejsGetGlobalObject(eid), "NULL", &v);
}