# 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 \
#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" {
* 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);
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);
/*
* 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,
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);
#ifndef _h_EJS_INTERNAL
#define _h_EJS_INTERNAL 1
-#include "lib/ejs/ejs.h"
+#include "ejs.h"
/********************************** Defines ***********************************/
/*
* 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,
*/
/********************************** Includes **********************************/
-#include "lib/ejs/ejsInternal.h"
+#include "ejsInternal.h"
#if BLD_FEATURE_EJS
*/
while (1) {
if ((c = inputGetc(ep)) < 0) {
+ if (style == '/') {
+ return EJS_TOK_EOF;
+ }
ejsError(ep, "Syntax Error");
return EJS_TOK_ERR;
}
*/
/********************************** Includes **********************************/
-#include "lib/ejs/ejsInternal.h"
+#include "ejsInternal.h"
#if BLD_FEATURE_EJS
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);
* 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)
{
* 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;
* 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;
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));
/********************************** Includes **********************************/
-#include "lib/ejs/ejsInternal.h"
+#include "ejsInternal.h"
#if BLD_FEATURE_EJS
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);
* 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;
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);
}
*/
/********************************** Includes **********************************/
-#include "lib/ejs/ejsInternal.h"
+#include "ejsInternal.h"
#if BLD_FEATURE_EJS
/********************************** Includes **********************************/
-#include "lib/ejs/var.h"
+#include "var.h"
/*********************************** Locals ***********************************/
#if VAR_DEBUG
* 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;
}
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);
* 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);
}
* 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);
}
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;
}
* Initialize a C function.
*/
-MprVar mprCreateStringCFunctionVar(MprStringCFunction fn, void *thisPtr, int flags)
+MprVar mprCreateStringCFunctionVar(MprStringCFunction fn, void *thisPtr,
+ int flags)
{
MprVar v;
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;
v.string = mprStrdup(value);
v.allocatedData = 1;
} else {
- v.string = value;
+ v.string = (char*) value;
}
return v;
}
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;
*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");
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;
case MPR_TYPE_OBJECT:
case MPR_TYPE_UNDEFINED:
case MPR_TYPE_NULL:
+ case MPR_TYPE_PTR:
default:
break;
#if WIN
return _isnan(f);
#elif VXWORKS
- /* FUTURE */
+ /* FUTURE */
return (0);
#else
return (f == FP_NAN);
#if WIN
return !_finite(f);
#elif VXWORKS
- /* FUTURE */
+ /* FUTURE */
return (0);
#else
return (f == FP_INFINITE);
/********************************* Includes ***********************************/
-#include "lib/ejs/miniMpr.h"
+#include "miniMpr.h"
/********************************** Defines ***********************************/
#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
#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) \
#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;
* 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 */
/*
void *thisPtr;
} cFunctionWithStrings;
MprStr string; /* Allocated string */
- void *ptr; /* C pointer */
+ void *ptr; /* Opaque pointer */
#if !BLD_DEBUG && !LINUX && !VXWORKS
};
#endif
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
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);
/*
* 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)
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)
struct MprVar mprString(const char *s)
{
if (s == NULL) {
- return mprCreatePtrVar(NULL, "NULL");
+ return mprCreatePtrVar(NULL);
}
return mprCreateStringVar(s, 1);
}
*/
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)));
}
/*
*/
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);
}
/* Return a socket object */
- mpr_Return(eid, mprCreatePtrVar(transport,
- talloc_get_name(transport)));
+ mpr_Return(eid, mprCreatePtrVar(transport));
return 0;
}
/* Return a session object */
- mpr_Return(eid, mprCreatePtrVar(session,
- talloc_get_name(session)));
+ mpr_Return(eid, mprCreatePtrVar(session));
result = 0;
talloc_free(mem_ctx);
- mpr_Return(eid, mprCreatePtrVar(tree,
- talloc_get_name(tree)));
+ mpr_Return(eid, mprCreatePtrVar(tree));
return 0;
}
return 0;
}
- mpr_Return(eid, mprCreatePtrVar(tree, talloc_get_name(tree)));
+ mpr_Return(eid, mprCreatePtrVar(tree));
return 0;
}
r->constants(eid);
}
- v = mprCreatePtrVar(NULL, "NULL");
+ v = mprCreatePtrVar(NULL);
mprSetProperty(ejsGetGlobalObject(eid), "NULL", &v);
}