Ejemplo n.º 1
0
newtRef NsStrExactCompare(newtRefArg rcvr, newtRefArg a, newtRefArg b)
{
	char* aString;
	char* bString;
	newtRefVar theResult;
	
	(void) rcvr;

	/* check parameters */
    if (! NewtRefIsString(a))
    {
    	theResult = NewtThrow(kNErrNotAString, a);
    } else if (! NewtRefIsString(b)) {
        theResult = NewtThrow(kNErrNotAString, b);
	} else if (a == b) {
		theResult = NewtMakeInteger(0);
	} else {    
		aString = NewtRefToString(a);
		bString = NewtRefToString(b);
	
		theResult = NewtMakeInteger(strcmp(aString, bString));
	}
	
	return theResult;
}
Ejemplo n.º 2
0
newtRef NcDivide(newtRefArg r1, newtRefArg r2)
{
    bool	real;

    if (! NewtArgsIsNumber(r1, r2, &real))
		return NewtThrow0(kNErrNotANumber);

    if (real)
    {
        double real1;
        double real2;

        real1 = NewtRefToReal(r1);
        real2 = NewtRefToReal(r2);

        if (real2 == 0.0)
            return NewtThrow(kNErrDiv0, r2);

        return NewtMakeReal(real1 / real2);
    }
    else
    {
        int32_t	int1;
        int32_t	int2;

        int1 = NewtRefToInteger(r1);
        int2 = NewtRefToInteger(r2);

        if (int2 == 0)
            return NewtThrow(kNErrDiv0, r2);

        return NewtMakeInteger(int1 / int2);
    }
}
Ejemplo n.º 3
0
newtRef NsSetLength(newtRefArg rcvr, newtRefArg r, newtRefArg len)
{
	int32_t	n;

	if (NewtRefIsReadonly(r))
		return NewtThrow(kNErrObjectReadOnly, r);

    if (! NewtRefIsInteger(len))
        return NewtThrow(kNErrNotAnInteger, len);

	n = NewtRefToInteger(len);

    switch (NewtGetRefType(r, true))
    {
        case kNewtBinary:
        case kNewtString:
            NewtBinarySetLength(r, n);
            break;

        case kNewtArray:
            NewtSlotsSetLength(r, n, kNewtRefUnbind);
			break;

        case kNewtFrame:
			return NewtThrow(kNErrUnexpectedFrame, r);

		default:
			return NewtThrow(kNErrNotAnArrayOrString, r);
    }

    return r;
}
Ejemplo n.º 4
0
newtRef NsStrEqual(newtRefArg rcvr, newtRefArg a, newtRefArg b)
{
	char* aString;
	char* bString;
	newtRefVar theResult = kNewtRefNIL;
	
	(void) rcvr;

	/* check parameters */
    if (! NewtRefIsString(a))
    {
    	theResult = NewtThrow(kNErrNotAString, a);
    } else if (! NewtRefIsString(b)) {
        theResult = NewtThrow(kNErrNotAString, b);
	} else if (a == b) {
		theResult = kNewtRefTRUE;
	} else {    
		aString = NewtRefToString(a);
		bString = NewtRefToString(b);
	
		if (strcasecmp(aString, bString) == 0)
		{
			theResult = kNewtRefTRUE;
		}
	}
	
	return theResult;
}
Ejemplo n.º 5
0
newtRef NsParamStr(newtRefArg rcvr, newtRefArg baseString, newtRefArg paramStrArray)
{
    if (! NewtRefIsString(baseString))
        return NewtThrow(kNErrNotAString, baseString);

    if (! NewtRefIsArray(paramStrArray))
        return NewtThrow(kNErrNotAnArray, paramStrArray);

	return NewtParamStr(NewtRefToString(baseString), NewtStringLength(baseString), paramStrArray, true);
}
Ejemplo n.º 6
0
newtRef NsSymbolCompareLex(newtRefArg rcvr, newtRefArg r1, newtRefArg r2)
{
	if (! NewtRefIsSymbol(r1))
        return NewtThrow(kNErrNotASymbol, r1);

	if (! NewtRefIsSymbol(r2))
        return NewtThrow(kNErrNotASymbol, r2);

    return NewtMakeInteger(NewtSymbolCompareLex(r1, r2));
}
Ejemplo n.º 7
0
newtRef NcBOr(newtRefArg r1, newtRefArg r2)
{
    if (! NewtRefIsInteger(r1))
        return NewtThrow(kNErrNotAnInteger, r1);

    if (! NewtRefIsInteger(r2))
        return NewtThrow(kNErrNotAnInteger, r2);

    return (r1 | r2);
}
Ejemplo n.º 8
0
newtRef NsExtractByte(newtRefArg rcvr, newtRefArg r, newtRefArg offset)
{
    if (! NewtRefIsBinary(r))
        return NewtThrow(kNErrNotABinaryObject, r);

    if (! NewtRefIsInteger(offset))
        return NewtThrow(kNErrNotAnInteger, offset);

    return NewtGetBinarySlot(r, NewtRefToInteger(offset));
}
Ejemplo n.º 9
0
newtRef NcDiv(newtRefArg r1, newtRefArg r2)
{
    if (! NewtRefIsInteger(r1))
        return NewtThrow(kNErrNotAnInteger, r1);

    if (! NewtRefIsInteger(r2))
        return NewtThrow(kNErrNotAnInteger, r2);

    return NewtMakeInteger(NewtRefToInteger(r1) / NewtRefToInteger(r2));
}
Ejemplo n.º 10
0
newtRef NsShiftRight(newtRefArg rcvr, newtRefArg r1, newtRefArg r2)
{
    if (! NewtRefIsInteger(r1))
        return NewtThrow(kNErrNotAnInteger, r1);

    if (! NewtRefIsInteger(r2))
        return NewtThrow(kNErrNotAnInteger, r2);

    return NewtMakeInteger(NewtRefToInteger(r1) >> NewtRefToInteger(r2));
}
Ejemplo n.º 11
0
newtRef NsEndsWith(newtRefArg rcvr, newtRefArg str, newtRefArg sub)
{
	bool	result;

    if (! NewtRefIsString(str))
        return NewtThrow(kNErrNotAString, str);

    if (! NewtRefIsString(sub))
        return NewtThrow(kNErrNotAString, sub);

	result = NewtEndsWith(NewtRefToString(str), NewtRefToString(sub));

	return NewtMakeBoolean(result);
}
Ejemplo n.º 12
0
newtRef NsSubStr(newtRefArg rcvr, newtRefArg r, newtRefArg start, newtRefArg count)
{
	char* theString;
	char* theBuffer;
	int theStart, theEnd;
	size_t theLen;
	newtRefVar theResult;
	
	(void) rcvr;
	
	/* check parameters */
    if (! NewtRefIsString(r))
        return NewtThrow(kNErrNotAString, r);
    if (! NewtRefIsInteger(start))
        return NewtThrow(kNErrNotAnInteger, start);
    
    theString = NewtRefToString(r);
    theLen = strlen(theString);
    
    theStart = NewtRefToInteger(start);

    if (!NewtRefIsNIL(count))
    {
    	if (!NewtRefIsInteger(count))
    	{
        	return NewtThrow(kNErrNotAnInteger, count);
        }
        theEnd = theStart + NewtRefToInteger(count);
        if (theEnd > theLen)
        {
        	return NewtThrow(kNErrOutOfRange, count);
        }
	} else {
		theEnd = theLen;
	}

	/* new length */
	theLen = theEnd - theStart;
	
	/* create a buffer to copy the characters to */
	theBuffer = (char*) malloc(theLen + 1);
	(void) memcpy(theBuffer, (const char*) &theString[theStart], theLen);
	theBuffer[theLen] = 0;
	theResult = NewtMakeString(theBuffer, false);
	free(theBuffer);
	
	return theResult;
}
Ejemplo n.º 13
0
newtRef NsOrd(newtRefArg rcvr, newtRefArg r)
{
    if (! NewtRefIsCharacter(r))
        return NewtThrow(kNErrNotAnInteger, r);

    return NewtMakeInteger(NewtRefToCharacter(r));
}
Ejemplo n.º 14
0
newtRef NcBNot(newtRefArg r)
{
    if (! NewtRefIsInteger(r))
        return NewtThrow(kNErrNotAnInteger, r);

    return NewtMakeInteger(~ NewtRefToInteger(r));
}
Ejemplo n.º 15
0
newtRef NsMakeBinary(newtRefArg rcvr, newtRefArg length, newtRefArg klass)
{
    if (! NewtRefIsInteger(length))
        return NewtThrow(kNErrNotAnInteger, length);

	return NewtMakeBinary(klass, NULL, NewtRefToInteger(length), false);
}
Ejemplo n.º 16
0
bool protoREGEX_refIsPreg(newtRefArg r)
{
    if (! NewtRefIsBinary(r))
	{
        NewtThrow(kNErrNotABinaryObject, r);
		return false;
	}

    if (NewtLength(r) != sizeof(regex_t))
	{
        NewtThrow(kNErrNegativeLength, r);
		return false;
	}

	return true;
}
Ejemplo n.º 17
0
newtRef NsMakeBinaryFromHex(newtRefArg rcvr, newtRefArg hex, newtRefArg klass)
{
    if (! NewtRefIsString(hex))
        return NewtThrow(kNErrNotAString, hex);

	return NewtMakeBinaryFromHex(klass, NewtRefToString(hex), false);
}
Ejemplo n.º 18
0
newtRef NewtObjSetClass(newtRefArg r, newtRefArg c)
{
    newtObjRef	obj;

    obj = NewtRefToPointer(r);

    if (obj != NULL)
    {
        if (NewtObjIsFrame(obj))
		{
			if (NewtRefIsReadonly(r))
			{
				NewtThrow(kNErrObjectReadOnly, r);
				return r;
			}

			NewtObjSetSlot(obj, NS_CLASS, c);
        }
		else
		{
            obj->as.klass = c;
		}
    }

    return r;
}
Ejemplo n.º 19
0
newtRef NcARef(newtRefArg r, newtRefArg p)
{
    if (! NewtRefIsInteger(p))
        return NewtThrow(kNErrNotAnInteger, p);

    return NewtARef(r, NewtRefToInteger(p));
}
Ejemplo n.º 20
0
newtRef NcSetARef(newtRefArg r, newtRefArg p, newtRefArg v)
{
    if (! NewtRefIsInteger(p))
        return NewtThrow(kNErrNotAnInteger, p);

    return NewtSetARef(r, NewtRefToInteger(p), v);
}
Ejemplo n.º 21
0
newtRef NsNegate(newtRefArg rcvr, newtRefArg integer)
{
  if (! NewtRefIsInteger(integer))
    return NewtThrow(kNErrNotAnInteger, integer);
  
  return NewtMakeInt32(- (NewtRefToInteger(integer)));
}
Ejemplo n.º 22
0
newtRef NsGetEnv(newtRefArg rcvr, newtRefArg r)
{
    if (! NewtRefIsString(r))
        return NewtThrow(kNErrNotAString, r);

    return NewtGetEnv(NewtRefToString(r));
}
Ejemplo n.º 23
0
newtRef NsCompile(newtRefArg rcvr, newtRefArg r)
{
    if (! NewtRefIsString(r))
        return NewtThrow(kNErrNotAString, r);

    return NBCCompileStr(NewtRefToString(r), true);
}
Ejemplo n.º 24
0
newtRef NsStrLen(newtRefArg rcvr, newtRefArg r)
{
    if (! NewtRefIsString(r))
        return NewtThrow(kNErrNotAString, r);

    return NewtMakeInteger(NewtStringLength(r));
}
Ejemplo n.º 25
0
newtRef protoREGEX_regcomp(newtRefArg pattern, newtRefArg opt)
{
	regex_t	preg;
	int		cflags = REG_EXTENDED;
	int		err;

    if (! NewtRefIsString(pattern))
        return NewtThrow(kNErrNotAString, pattern);

    if (NewtRefIsString(opt))
	{
		char *		optstr;
		uint32_t	len;
		uint32_t	i;

		optstr = NewtRefToString(opt);
		len = NewtLength(opt);

		for (i = 0; i < len && optstr[i]; i++)
		{
			switch (optstr[i])
			{
/*
				case 'e':
					cflags |= REG_EXTENDED;
					break;
*/
				case 'i':
					cflags |= REG_ICASE;
					break;

				case 'm':
					cflags |= REG_NEWLINE;
					break;
			}
		}
	}

	err = regcomp(&preg, NewtRefToString(pattern), cflags);

	if (err != 0)
	{
        return NewtThrow(kNErrRegcomp, pattern);
	}

	return NewtMakeBinary(kNewtRefUnbind, (uint8_t *)&preg, sizeof(preg), false);
}
Ejemplo n.º 26
0
/** Call a function with an array of parameters
 * 
 * @param rcvr		[in] レシーバ
 * @param func		[in] Function
 * @param params	[in] Parameters
 * 
 * @return			Return value
 */
newtRef 	NsApply(newtRefArg rcvr, newtRefArg func, newtRefArg params)
{
	if (! NewtRefIsFunction(func))
	{
		return NewtThrow(kNErrNotAFunction, func);
	}
	
	newtRef ary = NewtRefIsNIL(params) ? NewtMakeArray(kNewtRefUnbind, 0) : params;
	return NcCallWithArgArray(func, ary);
}
Ejemplo n.º 27
0
newtRef NsMakeSymbol(newtRefArg rcvr, newtRefArg r)
{
    char *	s;

    if (! NewtRefIsString(r))
        return NewtThrow(kNErrNotAString, r);

    s = NewtRefToString(r);

    return NewtMakeSymbol(s);
}
Ejemplo n.º 28
0
newtRef NsRef(newtRefArg rcvr, newtRefArg integer)
{
  if (! NewtRefIsInteger(integer))
    return NewtThrow(kNErrNotAnInteger, integer);

  newtRef result = (newtRef)NewtRefToInteger(integer);
  if (NewtRefIsPointer(result) == false) {
    //result = NSSYM0(weird_immediate);
  }
  return result;
}
Ejemplo n.º 29
0
newtRef NsExtractWord(newtRefArg rcvr, newtRefArg r, newtRefArg offset)
{
  if (! NewtRefIsBinary(r))
    return NewtThrow(kNErrNotABinaryObject, r);
  
  if (! NewtRefIsInteger(offset))
    return NewtThrow(kNErrNotAnInteger, offset);

  uint32_t len = NewtBinaryLength(r);
  uint32_t p = NewtRefToInteger(offset);
  
  if (p < len && p + 1 < len)
  {
    uint8_t *	data = NewtRefToBinary(r);
    uint32_t value = (data[p] << 8) | (data[p+1]);
    return NewtMakeInteger(value);
  }
  
  return kNewtRefUnbind;

}
Ejemplo n.º 30
0
newtRef NsMakeArray(newtRefArg rcvr, newtRefArg size, newtRefArg initialValue) {
  if (!NewtRefIsInteger(size)) {
    return NewtThrow(kNErrNotAnInteger, size);
  }
  int length = NewtRefToInteger(size);
  newtRef result = NewtMakeArray(kNewtRefUnbind, length);
  int i;
  for (i = 0; i<length; i++) {
    NewtSlotsSetSlot(result, i, initialValue);
  }
  return result;
}