Esempio n. 1
0
bool NewtArgsIsNumber(newtRefArg r1, newtRefArg r2, bool * real)
{
    *real = false;

    if (NewtRefIsReal(r1))
    {
        *real = true;
    }
    else
    {
        if (! NewtRefIsInteger(r1))
            return false;
    }

    if (NewtRefIsReal(r2))
    {
        *real = true;
    }
    else
    {
        if (! NewtRefIsInteger(r2))
            return false;
    }

    return true;
}
Esempio n. 2
0
newtRef NcBOr(newtRefArg r1, newtRefArg r2)
{
    if (! NewtRefIsInteger(r1))
        return NewtThrow(kNErrNotAnInteger, r1);

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

    return (r1 | r2);
}
Esempio n. 3
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));
}
Esempio n. 4
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));
}
Esempio n. 5
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;
}
Esempio n. 6
0
newtRef NcSetARef(newtRefArg r, newtRefArg p, newtRefArg v)
{
    if (! NewtRefIsInteger(p))
        return NewtThrow(kNErrNotAnInteger, p);

    return NewtSetARef(r, NewtRefToInteger(p), v);
}
Esempio n. 7
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;
}
Esempio n. 8
0
newtRef NcARef(newtRefArg r, newtRefArg p)
{
    if (! NewtRefIsInteger(p))
        return NewtThrow(kNErrNotAnInteger, p);

    return NewtARef(r, NewtRefToInteger(p));
}
Esempio n. 9
0
newtRef NsDefMagicPointer(newtRefArg rcvr, newtRefArg r, newtRefArg v)
{
	int32_t	table = 0;
	int32_t	index;

	if (NewtRefIsNumberedMP(r))
	{
		table = NewtMPToTable(r);
		index = NewtMPToIndex(r);

		if (table != 0)
		{	// テーブル番号 0 以外は未サポート
			return kNewtRefUnbind;
		}
	}
	else if (NewtRefIsInteger(r))
	{
		index = NewtRefToInteger(r);
	}
	else
	{
#ifdef __NAMED_MAGIC_POINTER__
		return NsDefNamedMP(rcvr, r, v);
#else
		return kNewtRefUnbind;
#endif
	}

	if (NewtLength(MAGIC_POINTERS) <= index)
	{	// テーブルの長さを拡張
		NewtSetLength(MAGIC_POINTERS, index + 1);
	}

	return NewtSetArraySlot(MAGIC_POINTERS, index, v);
}
Esempio n. 10
0
newtRef NsNegate(newtRefArg rcvr, newtRefArg integer)
{
  if (! NewtRefIsInteger(integer))
    return NewtThrow(kNErrNotAnInteger, integer);
  
  return NewtMakeInt32(- (NewtRefToInteger(integer)));
}
Esempio n. 11
0
newtRef NsChr(newtRefArg rcvr, newtRefArg r)
{
    if (! NewtRefIsInteger(r))
        return NewtThrow(kNErrNotAnInteger, r);

    return NewtMakeCharacter(NewtRefToInteger(r));
}
Esempio n. 12
0
newtRef NcBNot(newtRefArg r)
{
    if (! NewtRefIsInteger(r))
        return NewtThrow(kNErrNotAnInteger, r);

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

	return NewtMakeBinary(klass, NULL, NewtRefToInteger(length), false);
}
Esempio n. 14
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));
}
Esempio n. 15
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;
}
Esempio n. 16
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;
}
Esempio n. 17
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;

}
Esempio n. 18
0
newtRef NsIsInteger(newtRefArg rcvr, newtRefArg r)
{
    return NewtMakeBoolean(NewtRefIsInteger(r));
}
Esempio n. 19
0
newtRef NsIsNumber(newtRefArg rcvr, newtRefArg r)
{
    return NewtMakeBoolean(NewtRefIsInteger(r) || NewtRefIsReal(r));
}