bool SimpleArray_UB16_1::typep(Value type) const
{
  if (consp(type))
    {
      Value type_specifier_atom = xcar(type);
      Value tail = xcdr(type);
      if (type_specifier_atom == S_array || type_specifier_atom == S_simple_array)
        {
          if (consp(tail))
            {
              Value element_type = xcar(tail);
              if (element_type == UNSPECIFIED)
                ; // ok
              else
                {
                  Value upgraded_element_type = upgraded_array_element_type(element_type);
                  if (::equal(upgraded_element_type, UB16_TYPE))
                    ; // ok
                  else if (::equal(upgraded_element_type,
                                   list3(S_integer, FIXNUM_ZERO, make_fixnum(65535))))
                    ; // ok
                  else if (::equal(upgraded_element_type,
                                   list3(S_integer, FIXNUM_ZERO, list1(make_fixnum(65536)))))
                    ; // ok
                  else
                    return false;
                }
              tail = xcdr(tail);
              if (tail == NIL)
                return true;
              if (cdr(tail) == NIL) // i.e. length(tail) == 1
                {
                  Value dimensions = xcar(tail);
                  if (dimensions == UNSPECIFIED)
                    return true;
                  if (dimensions == FIXNUM_ONE)
                    return true;
                  if (::equal(dimensions, list1(UNSPECIFIED)))
                    return true;
                  if (::equal(dimensions, list1(make_fixnum(_capacity))))
                    return true;
                }
            }
        }
    }
  else if (symbolp(type))
    {
      if (type == S_vector || type == S_sequence || type == S_simple_array
          || type == S_array || type == S_atom || type == T)
        return true;
    }
  else
    {
      if (type == C_vector || type == C_array || type == C_sequence || type == C_t)
        return true;
    }
  return false;
}
Exemple #2
0
static Lisp_Object Linteger_decode_float(Lisp_Object nil, Lisp_Object a)
{
    double d = float_of_number(a);
#ifdef COMMON
    int tag = (int)a & TAG_BITS;
#endif
    int x, neg = 0;
    int32_t a1, a2;
    CSL_IGNORE(nil);
    if (!is_float(a)) return aerror("integer-decode-float");
    if (d == 0.0)
#ifdef COMMON
    {   mv_2 = fixnum_of_int(0);
        mv_3 = fixnum_of_int(d<0 ? -1 : 1);
        nvalues(fixnum_of_int(0), 3);
    }
#else
        return list3(fixnum_of_int(0), fixnum_of_int(0),
                     fixnum_of_int(d<0 ? -1 : 1));
#endif
    if (d < 0.0) d = -d, neg = 1;
    d = frexp(d, &x);
    if (d == 1.0) d = 0.5, x++;
#ifdef COMMON
    if (tag == TAG_SFLOAT)
    {   d *= TWO_20;
        x -= 20;
        a1 = (int32_t)d;
        a = fixnum_of_int(a1);
    }
    else if (tag == TAG_BOXFLOAT &&
             type_of_header(flthdr(a)) == TYPE_SINGLE_FLOAT)
    {   d *= TWO_24;
        x -= 24;
        a1 = (int32_t)d;
        a = fixnum_of_int(a1);
    }
    else
#endif
    {   d *= TWO_22;
        a1 = (int32_t)d;
        d -= (double)a1;
        a2 = (int32_t)(d*TWO_31);  /* This conversion should be exact */
        x -= 53;
        a = make_two_word_bignum(a1, a2);
        errexit();
    }
#ifdef COMMON
    {   mv_2 = fixnum_of_int(x);
        mv_3 = neg ? fixnum_of_int(-1) : fixnum_of_int(1);
        return nvalues(a, 3);
    }
#else
        return list3(a, fixnum_of_int(x),
                     neg ? fixnum_of_int(-1) : fixnum_of_int(1));
#endif
}
Exemple #3
0
INLINE_FUN SEXP lang4(SEXP s, SEXP t, SEXP u, SEXP v)
{
    PROTECT(s);
    s = LCONS(s, list3(t, u, v));
    UNPROTECT(1);
    return s;
}
Exemple #4
0
static Lisp_Object Ldecode_float(Lisp_Object nil, Lisp_Object a)
{
    double d = float_of_number(a), neg = 1.0;
    int x;
    Lisp_Object sign;
    if (!is_float(a)) return aerror("decode-float");
    if (d < 0.0) d = -d, neg = -1.0;
    if (d == 0.0) x = 0;
    else
    {   d = frexp(d, &x);
        if (d == 1.0) d = 0.5, x++;
    }
#ifdef COMMON
    if (is_sfloat(a)) sign = make_sfloat(neg);
    else
#endif
        sign = make_boxfloat(neg, type_of_header(flthdr(a)));
    errexit();
    push(sign);
#ifdef COMMON
    if (is_sfloat(a)) a = make_sfloat(d);
    else
#endif
        a = make_boxfloat(d, type_of_header(flthdr(a)));
    pop(sign);
    errexit();
#ifdef COMMON
    mv_2 = fixnum_of_int(x);
    mv_3 = sign;
    return nvalues(a, 3);
#else
    return list3(sign, fixnum_of_int(x), a);
#endif
}
static void
generate_reverse_dimension_expr(TYPE_DESC tp, expr dimSpec) {

    if (TYPE_REF(tp) != NULL && IS_ARRAY_TYPE(tp)) {

        expr lower = NULL;
        expr upper = NULL;
        expr step = NULL;
        expr dims = NULL;
        int n;

        if (TYPE_DIM_UPPER(tp) != NULL) {
            n = (int)EXPV_INT_VALUE(TYPE_DIM_UPPER(tp));
            upper = make_int_enode(n);
        }
        if (TYPE_DIM_LOWER(tp) != NULL) {
            n = (int)EXPV_INT_VALUE(TYPE_DIM_LOWER(tp));
            lower = make_int_enode(n);
        }
        if (TYPE_DIM_STEP(tp) != NULL) {
            n = (int)EXPV_INT_VALUE(TYPE_DIM_STEP(tp));
            step = make_int_enode(n);
        }

        dims = list3(F_INDEX_RANGE, lower, upper, step);
        set_index_range_type(dims);
        list_put_last(dimSpec, dims);
        generate_reverse_dimension_expr(TYPE_REF(tp), dimSpec);
    }
}
Exemple #6
0
// ### autoload-macro
Value EXT_autoload_macro(unsigned int numargs, Value args[])
{
  switch (numargs)
    {
    case 1:
      if (listp(args[0]))
        {
          Value list = args[0];
          while (list != NIL)
            {
              Value name = car(list);
              check_symbol(name)->set_autoload_macro(new Autoload(name));
              list = xcdr(list);
            }
          return T;
        }
      else if (symbolp(args[0]))
        {
          the_symbol(args[0])->set_autoload_macro(new Autoload(args[0]));
          return T;
        }
      else
        return signal_type_error(args[0], list3(S_or, S_symbol, S_list));
    case 2:
      if (listp(args[0]))
        {
          AbstractString * filename = check_string(args[1]);
          Value list = args[0];
          while (list != NIL)
            {
              Value name = car(list);
              check_symbol(name)->set_autoload_macro(new Autoload(name, filename));
              list = xcdr(list);
            }
          return T;
        }
      else if (symbolp(args[0]))
        {
          the_symbol(args[0])->set_autoload_macro(new Autoload(args[0], check_string(args[1])));
          return T;
        }
      else
        return signal_type_error(args[0], list3(S_or, S_symbol, S_list));
    default:
      return wrong_number_of_arguments(S_autoload, numargs, 1, 2);
    }
}
Exemple #7
0
static obj func_def(obj name, obj params, obj expr) {
	assert(type(name)==tSymbol);
	obj* func = lfind_var(name);
	if(! *func) {
		obj (*fn)(obj) = searchFunc(name, infnbind);
		if(fn) let(func, tag(fn));
	}
	list lam = list3(retain(params), retain(expr), retain(env));
    if(*func){
        if(type(*func)==tClosure){			// free if complete overload, in the future
            lam = merge(lam, retain(ul(*func)));
        } else if(type(*func)==tInternalFn){
            lam = merge(lam, list3(retain(*func), nil, nil));
        }
    }
	return retain(*let(func, render(tClosure, lam)));
}
Exemple #8
0
static Lisp_Object
gtk_color_instance_rgb_components (struct Lisp_Color_Instance *c)
{
  GdkColor *color = COLOR_INSTANCE_GTK_COLOR (c);
  return (list3 (make_int (color->red),
		 make_int (color->green),
		 make_int (color->blue)));
}
Exemple #9
0
inline SimpleArray_UB32_1 * check_simple_array_ub32_1(Value value)
{
    if (simple_array_ub32_1_p(value))
        return the_simple_array_ub32_1(value);
    Value expected_type = list3(S_simple_array, S_unsigned_byte, list1(make_fixnum(32)));
    signal_type_error(value, expected_type);
    // Not reached.
    return NULL;
}
Exemple #10
0
INDEX Array_T::dimension(unsigned int n) const
{
  if (n < _rank)
    return _dimensions[n];

  signal_type_error(make_unsigned_integer(n),
                    list3(S_integer, FIXNUM_ZERO, make_unsigned_integer(_rank - 1)));
  // not reached
  return 0;
}
Exemple #11
0
Layout * PackageError::get_layout_for_class()
{
  static Layout * layout;
  if (layout == NULL)
    layout = new Layout(the_class(C_package_error),
                        list3(S_format_control,
                              S_format_arguments,
                              S_package),
                        NIL);
  return layout;
}
Exemple #12
0
static Lisp_Object
make_dom (xmlNode *node)
{
  if (node->type == XML_ELEMENT_NODE)
    {
      Lisp_Object result = Fcons (intern ((char *) node->name), Qnil);
      xmlNode *child;
      xmlAttr *property;
      Lisp_Object plist = Qnil;

      /* First add the attributes. */
      property = node->properties;
      while (property != NULL)
	{
	  if (property->children &&
	      property->children->content)
	    {
	      char *content = (char *) property->children->content;
	      plist = Fcons (Fcons (intern ((char *) property->name),
				    build_string (content)),
			     plist);
	    }
	  property = property->next;
	}
      result = Fcons (Fnreverse (plist), result);

      /* Then add the children of the node. */
      child = node->children;
      while (child != NULL)
	{
	  result = Fcons (make_dom (child), result);
	  child = child->next;
	}

      return Fnreverse (result);
    }
  else if (node->type == XML_TEXT_NODE || node->type == XML_CDATA_SECTION_NODE)
    {
      if (node->content)
	return build_string ((char *) node->content);
      else
	return Qnil;
    }
  else if (node->type == XML_COMMENT_NODE)
    {
      if (node->content)
	return list3 (intern ("comment"), Qnil,
		      build_string ((char *) node->content));
      else
	return Qnil;
    }
  else
    return Qnil;
}
Value ZeroRankArray::aref(unsigned long i) const
{
  if (i == 0)
    {
      if (_array)
        return _array->aref(_offset);
      else
        return _data;
    }
  return signal_type_error(make_unsigned_integer(i),
                           list3(S_integer, FIXNUM_ZERO, FIXNUM_ZERO));
}
Exemple #14
0
static
obj enclose(obj v){
	vto_close = Assoc();
	assert(v->type == tArrow);
	obj vs = Assoc();
	pbind_vars(&vs, em0(v));
	penv = op(vs, nil);
	enclose0(em1(v));
	release(penv);

	assert(vto_close->type == tAssoc);
	if(! ul(vto_close)) return render(tClosure, list3(retain(em0(v)), retain(em1(v)), nil));
	list varlist = nil, vallist = nil;
	for(list l = ul(vto_close); l; l=rest(l)){
		varlist = cons(retain(car(first(l))), varlist);
		vallist = cons(find_var(car(first(l))), vallist);
	}
	release(vto_close);
	obj rr = curry(List2v(varlist), List2v(vallist), retain(em1(v)));
	rr = render(tClosure, list3(retain(em0(v)), rr, nil));
	return rr;
}
Value ZeroRankArray::aset(unsigned long i, Value new_value)
{
  if (i == 0)
    {
      if (_array)
        _array->aset(_offset, new_value);
      else
        _data = new_value;
      return new_value;
    }
  return signal_type_error(make_unsigned_integer(i),
                           list3(S_integer, FIXNUM_ZERO, FIXNUM_ZERO));
}
static void
generate_assumed_shape_expr(expr dimSpec, int dim) {
    expv dimElm;

    if (dim == 1)
        return;

    dimElm = list3(F_INDEX_RANGE, NULL, NULL, NULL);
    set_index_range_type(dimElm);

    generate_assumed_shape_expr(dimSpec, dim - 1);

    list_put_last(dimSpec, dimElm);
}
Exemple #17
0
void init_coll_functions(void)
{
    define_generic_function("element", list2(obj_CollClass, obj_ObjectClass),
                            false, list1(symbol("default")), false,
                            list1(obj_ObjectClass), obj_False);
    define_generic_function("element-setter",
                            list3(obj_ObjectClass, obj_CollClass,
                                  obj_ObjectClass),
                            false, obj_False, false,
                            list1(obj_ObjectClass), obj_False);
    define_generic_function("size", list1(obj_ObjectClass),
                            false, obj_False, false,
                            obj_Nil, obj_ObjectClass);
}
void
generate_shape_expr(TYPE_DESC tp, expr dimSpec) {
    expv dimElm;

    if ((TYPE_REF(tp) == NULL) || !IS_ARRAY_TYPE(tp))
        return;

    dimElm = list3(F_INDEX_RANGE,
                   TYPE_DIM_LOWER(tp), TYPE_DIM_UPPER(tp), TYPE_DIM_STEP(tp));
    set_index_range_type(dimElm);
    generate_shape_expr(TYPE_REF(tp), dimSpec);

    if(TYPE_N_DIM(tp) != 0)
        list_put_last(dimSpec, dimElm);
}
Exemple #19
0
Value Array_T::aref(unsigned long index) const
{
    if (_data)
      {
        if (index < _total_size)
          return _data[index];
        else
          return signal_type_error(make_unsigned_integer(index),
                                   list3(S_integer, FIXNUM_ZERO, make_unsigned_integer(_total_size)));
      }
    else
      {
        // displaced
        return _array->aref(index + _offset);
      }
}
static void
generate_contracted_shape_expr(TYPE_DESC tp, expr dimSpec, int dim) {
    expv dimElm;

    if ((TYPE_REF(tp) == NULL) || !IS_ARRAY_TYPE(tp))
        return;

    dimElm = list3(F_INDEX_RANGE,
                   TYPE_DIM_LOWER(tp), TYPE_DIM_UPPER(tp), TYPE_DIM_STEP(tp));
    set_index_range_type(dimElm);

    if (dim == 0) {
        generate_shape_expr(TYPE_REF(tp), dimSpec);
    }  else {
        generate_contracted_shape_expr(TYPE_REF(tp), dimSpec, dim - 1);
        list_put_last(dimSpec, dimElm);
    }
}
/*
	void GetAppList(const char *signature, BList *teamIDList) const
	@case 3			teamIDList is not NULL and not empty, signature is not
					NULL and app(s) with this signature is (are) running
	@results		Should append the team IDs of all running apps with the
					supplied signature to teamIDList.
*/
void GetAppListTester::GetAppListTestB3()
{
	const char *signature = "application/x-vnd.obos-app-run-testapp1";
	// create a list with some dummy entries
	BList list;
	list.AddItem((void*)-7);
	list.AddItem((void*)-42);
	// get a list of running applications for reference
	BRoster roster;
	BList list1(list);
	roster.GetAppList(signature, &list1);
	check_list(list1, list);
	// run some apps
	AppRunner runner1(true);
	AppRunner runner2(true);
	AppRunner runner3(true);
	CHK(runner1.Run("AppRunTestApp1") == B_OK);
	CHK(runner2.Run("AppRunTestApp2") == B_OK);
	CHK(runner3.Run("BMessengerTestApp1") == B_OK);
	BList expectedApps;
	expectedApps.AddItem((void*)runner1.Team());
	expectedApps.AddItem((void*)runner2.Team());
	// get a new app list and check it
	BList list2(list);
	roster.GetAppList(signature, &list2);
	check_list(list2, list, expectedApps);
	// quit app 1
	runner1.WaitFor(true);
	expectedApps.RemoveItem((void*)runner1.Team());
	BList list3(list);
	roster.GetAppList(signature, &list3);
	check_list(list3, list, expectedApps);
	// quit app 2
	runner2.WaitFor(true);
	expectedApps.RemoveItem((void*)runner2.Team());
	BList list4(list);
	roster.GetAppList(signature, &list4);
	check_list(list4, list, expectedApps);
	// quit app 3
	runner3.WaitFor(true);
	BList list5(list);
	roster.GetAppList(signature, &list5);
	check_list(list5, list, expectedApps);
}
Exemple #22
0
Value Array_T::aset(unsigned long index, Value new_value)
{
    if (_data)
      {
        if (index < _total_size)
          {
            _data[index] = new_value;
            return new_value;
          }
        else
          return signal_type_error(make_unsigned_integer(index),
                                   list3(S_integer, FIXNUM_ZERO, make_unsigned_integer(_total_size)));
      }
    else
      {
        // displaced
        return _array->aset(index + _offset, new_value);
      }
}
/* =========== CompareLists ================*/
TEST(LinkedListExcercisesTestSuite, CompareLists)
{
    int data1[5] = { 2, 4, 6, 7, 8 };
    LinkedList<int> list1(data1, 5);

    //test identical list
    LinkedList<int> list2(data1, 5);
    EXPECT_TRUE(LinkedListExercises::CompareLists(list1, list2));
    //test identical but shorter list
    LinkedList<int> list3(data1, 4);
    EXPECT_FALSE(LinkedListExercises::CompareLists(list1, list3));
    //test diffrent list
    int data2[4] = { 1, 3, 6, 7 };
    LinkedList<int> list4(data2, 4);
    EXPECT_FALSE(LinkedListExercises::CompareLists(list1, list4));
    //test empty
    LinkedList<int> empty_list1;
    LinkedList<int> empty_list2;
    EXPECT_TRUE(LinkedListExercises::CompareLists(empty_list1, empty_list2));
}
Exemple #24
0
static Lisp_Object Ldecode_float(Lisp_Object nil, Lisp_Object a)
{
    double d, neg = 1.0;
    int x;
    Lisp_Object sign;
    if (!is_float(a)) return aerror("decode-float");
    d = float_of_number(a);
    if (!(d == d)) return onevalue(nil); /* a NaN */
    if (d < 0.0) d = -d, neg = -1.0;
    if (d == 0.0) x = 0;
    else if (1.0/d == 0.0)               /* An infinity */
    {   x = 1000000;                     /* Extreme (arbitrary) value */
    }
    else
    {   d = frexp(d, &x);
        if (d == 1.0) d = 0.5, x++;
    }
#ifdef COMMON
    if (is_sfloat(a)) sign = make_sfloat(neg);
    else
#endif
        sign = make_boxfloat(neg, type_of_header(flthdr(a)));
    errexit();
    push(sign);
#ifdef COMMON
    if (is_sfloat(a)) a = make_sfloat(d);
    else
#endif
        a = make_boxfloat(d, type_of_header(flthdr(a)));
    pop(sign);
    errexit();
#ifdef COMMON
    mv_2 = fixnum_of_int(x);
    mv_3 = sign;
    return nvalues(a, 3);
#else
    return list3(sign, fixnum_of_int(x), a);
#endif
}
Exemple #25
0
expv OMP_pragma_list(enum OMP_pragma pragma,expv arg1,expv arg2)
{
    return list3(OMP_PRAGMA,expv_int_term(INT_CONSTANT,NULL,(int)pragma),
		 arg1,arg2);
}
Exemple #26
0
void init_fd_functions(void)
{
    define_constant("fd-close",
                    make_raw_method("fd-close", list1(obj_FixnumClass),
                                    false, obj_False, false,
                                    list2(obj_BooleanClass, obj_ObjectClass),
                                    obj_False, fd_close));
    define_method("fd-error-string", list1(obj_FixnumClass), false,
                  obj_False, false, obj_ObjectClass, fd_error_str);
    define_constant("fd-input-available?",
                    make_raw_method("fd-input-available?",
                                    list1(obj_FixnumClass),
                                    false, obj_False, false,
                                    list2(obj_BooleanClass, obj_ObjectClass),
                                    obj_False, fd_input_available));
    define_constant("fd-open",
                    make_raw_method("fd-open",
                                    list2(obj_ByteStringClass,
                                          obj_FixnumClass),
                                    false, obj_False, false,
                                    list2(obj_ObjectClass, obj_ObjectClass),
                                    obj_False, fd_open));
    define_constant("fd-read",
                    make_raw_method("fd-read",
                                    listn(4, obj_FixnumClass,
                                          obj_BufferClass,
                                          obj_FixnumClass,
                                          obj_FixnumClass),
                                    false, obj_False, false,
                                    list2(obj_ObjectClass, obj_ObjectClass),
                                    obj_False, fd_read));
    define_constant("fd-seek",
                    make_raw_method("fd-seek",
                                    list3(obj_FixnumClass,
                                          obj_FixnumClass,
                                          obj_FixnumClass),
                                    false, obj_False, false,
                                    list2(obj_ObjectClass, obj_ObjectClass),
                                    obj_False, fd_seek));
    define_constant("fd-sync-output",
                    make_raw_method("fd-sync-output",
                                    list1(obj_FixnumClass),
                                    false, obj_False, false,
                                    list2(obj_BooleanClass, obj_ObjectClass),
                                    obj_False, fd_sync_output));
    define_constant("fd-write",
                    make_raw_method("fd-write",
                                    listn(4, obj_FixnumClass,
                                          obj_BufferClass,
                                          obj_FixnumClass,
                                          obj_FixnumClass),
                                    false, obj_False, false,
                                    list2(obj_ObjectClass, obj_ObjectClass),
                                    obj_False, fd_write));
    define_constant("fd-exec",
                    make_raw_method("fd-exec",
                                    list1(obj_ByteStringClass),
                                    false, obj_False, false,
                                    list2(obj_ObjectClass, obj_ObjectClass),
                                    obj_False, fd_exec));
    define_function("file-write-date", list1(obj_ByteStringClass), false,
                    obj_False, false, obj_ObjectClass, file_write_date);

    define_constant("SEEK_SET", make_fixnum(SEEK_SET));
    define_constant("SEEK_CUR", make_fixnum(SEEK_CUR));
    define_constant("SEEK_END", make_fixnum(SEEK_END));
    define_constant("O_RDONLY", make_fixnum(O_RDONLY));
    define_constant("O_WRONLY", make_fixnum(O_WRONLY));
    define_constant("O_RDWR", make_fixnum(O_RDWR));
    define_constant("O_APPEND", make_fixnum(O_APPEND));
    define_constant("O_CREAT", make_fixnum(O_CREAT));
    define_constant("O_EXCL", make_fixnum(O_EXCL));
    define_constant("O_TRUNC", make_fixnum(O_TRUNC));
#ifndef _WIN32
    define_constant("O_NONBLOCK", make_fixnum(O_NONBLOCK));
#endif

    /* This compendium of error numbers comes from Tcl. */
#ifdef E2BIG
    define_constant("E2BIG", make_fixnum(E2BIG));
#endif
#ifdef EACCES
    define_constant("EACCES", make_fixnum(EACCES));
#endif
#ifdef EADDRINUSE
    define_constant("EADDRINUSE", make_fixnum(EADDRINUSE));
#endif
#ifdef EADDRNOTAVAIL
    define_constant("EADDRNOTAVAIL", make_fixnum(EADDRNOTAVAIL));
#endif
#ifdef EADV
    define_constant("EADV", make_fixnum(EADV));
#endif
#ifdef EAFNOSUPPORT
    define_constant("EAFNOSUPPORT", make_fixnum(EAFNOSUPPORT));
#endif
#ifdef EAGAIN
    define_constant("EAGAIN", make_fixnum(EAGAIN));
#endif
#ifdef EALIGN
    define_constant("EALIGN", make_fixnum(EALIGN));
#endif
#ifdef EALREADY
    define_constant("EALREADY", make_fixnum(EALREADY));
#endif
#ifdef EBADE
    define_constant("EBADE", make_fixnum(EBADE));
#endif
#ifdef EBADF
    define_constant("EBADF", make_fixnum(EBADF));
#endif
#ifdef EBADFD
    define_constant("EBADFD", make_fixnum(EBADFD));
#endif
#ifdef EBADMSG
    define_constant("EBADMSG", make_fixnum(EBADMSG));
#endif
#ifdef EBADR
    define_constant("EBADR", make_fixnum(EBADR));
#endif
#ifdef EBADRPC
    define_constant("EBADRPC", make_fixnum(EBADRPC));
#endif
#ifdef EBADRQC
    define_constant("EBADRQC", make_fixnum(EBADRQC));
#endif
#ifdef EBADSLT
    define_constant("EBADSLT", make_fixnum(EBADSLT));
#endif
#ifdef EBFONT
    define_constant("EBFONT", make_fixnum(EBFONT));
#endif
#ifdef EBUSY
    define_constant("EBUSY", make_fixnum(EBUSY));
#endif
#ifdef ECHILD
    define_constant("ECHILD", make_fixnum(ECHILD));
#endif
#ifdef ECHRNG
    define_constant("ECHRNG", make_fixnum(ECHRNG));
#endif
#ifdef ECOMM
    define_constant("ECOMM", make_fixnum(ECOMM));
#endif
#ifdef ECONNABORTED
    define_constant("ECONNABORTED", make_fixnum(ECONNABORTED));
#endif
#ifdef ECONNREFUSED
    define_constant("ECONNREFUSED", make_fixnum(ECONNREFUSED));
#endif
#ifdef ECONNRESET
    define_constant("ECONNRESET", make_fixnum(ECONNRESET));
#endif
#if defined(EDEADLK) && (!defined(EWOULDBLOCK) || (EDEADLK != EWOULDBLOCK))
    define_constant("EDEADLK", make_fixnum(EDEADLK));
#endif
#ifdef EDEADLOCK
    define_constant("EDEADLOCK", make_fixnum(EDEADLOCK));
#endif
#ifdef EDESTADDRREQ
    define_constant("EDESTADDRREQ", make_fixnum(EDESTADDRREQ));
#endif
#ifdef EDIRTY
    define_constant("EDIRTY", make_fixnum(EDIRTY));
#endif
#ifdef EDOM
    define_constant("EDOM", make_fixnum(EDOM));
#endif
#ifdef EDOTDOT
    define_constant("EDOTDOT", make_fixnum(EDOTDOT));
#endif
#ifdef EDQUOT
    define_constant("EDQUOT", make_fixnum(EDQUOT));
#endif
#ifdef EDUPPKG
    define_constant("EDUPPKG", make_fixnum(EDUPPKG));
#endif
#ifdef EEXIST
    define_constant("EEXIST", make_fixnum(EEXIST));
#endif
#ifdef EFAULT
    define_constant("EFAULT", make_fixnum(EFAULT));
#endif
#ifdef EFBIG
    define_constant("EFBIG", make_fixnum(EFBIG));
#endif
#ifdef EHOSTDOWN
    define_constant("EHOSTDOWN", make_fixnum(EHOSTDOWN));
#endif
#ifdef EHOSTUNREACH
    define_constant("EHOSTUNREACH", make_fixnum(EHOSTUNREACH));
#endif
#ifdef EIDRM
    define_constant("EIDRM", make_fixnum(EIDRM));
#endif
#ifdef EINIT
    define_constant("EINIT", make_fixnum(EINIT));
#endif
#ifdef EINPROGRESS
    define_constant("EINPROGRESS", make_fixnum(EINPROGRESS));
#endif
#ifdef EINTR
    define_constant("EINTR", make_fixnum(EINTR));
#endif
#ifdef EINVAL
    define_constant("EINVAL", make_fixnum(EINVAL));
#endif
#ifdef EIO
    define_constant("EIO", make_fixnum(EIO));
#endif
#ifdef EISCONN
    define_constant("EISCONN", make_fixnum(EISCONN));
#endif
#ifdef EISDIR
    define_constant("EISDIR", make_fixnum(EISDIR));
#endif
#ifdef EISNAME
    define_constant("EISNAM", make_fixnum(EISNAM));
#endif
#ifdef ELBIN
    define_constant("ELBIN", make_fixnum(ELBIN));
#endif
#ifdef EL2HLT
    define_constant("EL2HLT", make_fixnum(EL2HLT));
#endif
#ifdef EL2NSYNC
    define_constant("EL2NSYNC", make_fixnum(EL2NSYNC));
#endif
#ifdef EL3HLT
    define_constant("EL3HLT", make_fixnum(EL3HLT));
#endif
#ifdef EL3RST
    define_constant("EL3RST", make_fixnum(EL3RST));
#endif
#ifdef ELIBACC
    define_constant("ELIBACC", make_fixnum(ELIBACC));
#endif
#ifdef ELIBBAD
    define_constant("ELIBBAD", make_fixnum(ELIBBAD));
#endif
#ifdef ELIBEXEC
    define_constant("ELIBEXEC", make_fixnum(ELIBEXEC));
#endif
#ifdef ELIBMAX
    define_constant("ELIBMAX", make_fixnum(ELIBMAX));
#endif
#ifdef ELIBSCN
    define_constant("ELIBSCN", make_fixnum(ELIBSCN));
#endif
#ifdef ELNRNG
    define_constant("ELNRNG", make_fixnum(ELNRNG));
#endif
#ifdef ELOOP
    define_constant("ELOOP", make_fixnum(ELOOP));
#endif
#ifdef EMFILE
    define_constant("EMFILE", make_fixnum(EMFILE));
#endif
#ifdef EMLINK
    define_constant("EMLINK", make_fixnum(EMLINK));
#endif
#ifdef EMSGSIZE
    define_constant("EMSGSIZE", make_fixnum(EMSGSIZE));
#endif
#ifdef EMULTIHOP
    define_constant("EMULTIHOP", make_fixnum(EMULTIHOP));
#endif
#ifdef ENAMETOOLONG
    define_constant("ENAMETOOLONG", make_fixnum(ENAMETOOLONG));
#endif
#ifdef ENAVAIL
    define_constant("ENAVAIL", make_fixnum(ENAVAIL));
#endif
#ifdef ENET
    define_constant("ENET", make_fixnum(ENET));
#endif
#ifdef ENETDOWN
    define_constant("ENETDOWN", make_fixnum(ENETDOWN));
#endif
#ifdef ENETRESET
    define_constant("ENETRESET", make_fixnum(ENETRESET));
#endif
#ifdef ENETUNREACH
    define_constant("ENETUNREACH", make_fixnum(ENETUNREACH));
#endif
#ifdef ENFILE
    define_constant("ENFILE", make_fixnum(ENFILE));
#endif
#ifdef ENOANO
    define_constant("ENOANO", make_fixnum(ENOANO));
#endif
#if defined(ENOBUFS) && (!defined(ENOSR) || (ENOBUFS != ENOSR))
    define_constant("ENOBUFS", make_fixnum(ENOBUFS));
#endif
#ifdef ENOCSI
    define_constant("ENOCSI", make_fixnum(ENOCSI));
#endif
#ifdef ENODATA
    define_constant("ENODATA", make_fixnum(ENODATA));
#endif
#ifdef ENODEV
    define_constant("ENODEV", make_fixnum(ENODEV));
#endif
#ifdef ENOENT
    define_constant("ENOENT", make_fixnum(ENOENT));
#endif
#ifdef ENOEXEC
    define_constant("ENOEXEC", make_fixnum(ENOEXEC));
#endif
#ifdef ENOLCK
    define_constant("ENOLCK", make_fixnum(ENOLCK));
#endif
#ifdef ENOLINK
    define_constant("ENOLINK", make_fixnum(ENOLINK));
#endif
#ifdef ENOMEM
    define_constant("ENOMEM", make_fixnum(ENOMEM));
#endif
#ifdef ENOMSG
    define_constant("ENOMSG", make_fixnum(ENOMSG));
#endif
#ifdef ENONET
    define_constant("ENONET", make_fixnum(ENONET));
#endif
#ifdef ENOPKG
    define_constant("ENOPKG", make_fixnum(ENOPKG));
#endif
#ifdef ENOPROTOOPT
    define_constant("ENOPROTOOPT", make_fixnum(ENOPROTOOPT));
#endif
#ifdef ENOSPC
    define_constant("ENOSPC", make_fixnum(ENOSPC));
#endif
#ifdef ENOSR
    define_constant("ENOSR", make_fixnum(ENOSR));
#endif
#if defined(ENOSTR) && (!defined(ENOTTY) || (ENOTTY != ENOSTR))
    define_constant("ENOSTR", make_fixnum(ENOSTR));
#endif
#ifdef ENOSYM
    define_constant("ENOSYM", make_fixnum(ENOSYM));
#endif
#ifdef ENOSYS
    define_constant("ENOSYS", make_fixnum(ENOSYS));
#endif
#ifdef ENOTBLK
    define_constant("ENOTBLK", make_fixnum(ENOTBLK));
#endif
#ifdef ENOTCONN
    define_constant("ENOTCONN", make_fixnum(ENOTCONN));
#endif
#ifdef ENOTDIR
    define_constant("ENOTDIR", make_fixnum(ENOTDIR));
#endif
#if defined(ENOTEMPTY) && (!defined(EEXIST) || (ENOTEMPTY != EEXIST))
    define_constant("ENOTEMPTY", make_fixnum(ENOTEMPTY));
#endif
#ifdef ENOTNAM
    define_constant("ENOTNAM", make_fixnum(ENOTNAM));
#endif
#ifdef ENOTSOCK
    define_constant("ENOTSOCK", make_fixnum(ENOTSOCK));
#endif
#ifdef ENOTTY
    define_constant("ENOTTY", make_fixnum(ENOTTY));
#endif
#ifdef ENOTUNIQ
    define_constant("ENOTUNIQ", make_fixnum(ENOTUNIQ));
#endif
#ifdef ENXIO
    define_constant("ENXIO", make_fixnum(ENXIO));
#endif
#ifdef EOPNOTSUPP
    define_constant("EOPNOTSUPP", make_fixnum(EOPNOTSUPP));
#endif
#ifdef EPERM
    define_constant("EPERM", make_fixnum(EPERM));
#endif
#ifdef EPFNOSUPPORT
    define_constant("EPFNOSUPPORT", make_fixnum(EPFNOSUPPORT));
#endif
#ifdef EPIPE
    define_constant("EPIPE", make_fixnum(EPIPE));
#endif
#ifdef EPROCLIM
    define_constant("EPROCLIM", make_fixnum(EPROCLIM));
#endif
#ifdef EPROCUNAVAIL
    define_constant("EPROCUNAVAIL", make_fixnum(EPROCUNAVAIL));
#endif
#ifdef EPROGMISMATCH
    define_constant("EPROGMISMATCH", make_fixnum(EPROGMISMATCH));
#endif
#ifdef EPROGUNAVAIL
    define_constant("EPROGUNAVAIL", make_fixnum(EPROGUNAVAIL));
#endif
#ifdef EPROTO
    define_constant("EPROTO", make_fixnum(EPROTO));
#endif
#ifdef EPROTONOSUPPORT
    define_constant("EPROTONOSUPPORT", make_fixnum(EPROTONOSUPPORT));
#endif
#ifdef EPROTOTYPE
    define_constant("EPROTOTYPE", make_fixnum(EPROTOTYPE));
#endif
#ifdef ERANGE
    define_constant("ERANGE", make_fixnum(ERANGE));
#endif
#if defined(EREFUSED) && (!defined(ECONNREFUSED) || (EREFUSED != ECONNREFUSED))
    define_constant("EREFUSED", make_fixnum(EREFUSED));
#endif
#ifdef EREMCHG
    define_constant("EREMCHG", make_fixnum(EREMCHG));
#endif
#ifdef EREMDEV
    define_constant("EREMDEV", make_fixnum(EREMDEV));
#endif
#ifdef EREMOTE
    define_constant("EREMOTE", make_fixnum(EREMOTE));
#endif
#ifdef EREMOTEIO
    define_constant("EREMOTEIO", make_fixnum(EREMOTEIO));
#endif
#ifdef EREMOTERELEASE
    define_constant("EREMOTERELEASE", make_fixnum(EREMOTERELEASE));
#endif
#ifdef EROFS
    define_constant("EROFS", make_fixnum(EROFS));
#endif
#ifdef ERPCMISMATCH
    define_constant("ERPCMISMATCH", make_fixnum(ERPCMISMATCH));
#endif
#ifdef ERREMOTE
    define_constant("ERREMOTE", make_fixnum(ERREMOTE));
#endif
#ifdef ESHUTDOWN
    define_constant("ESHUTDOWN", make_fixnum(ESHUTDOWN));
#endif
#ifdef ESOCKTNOSUPPORT
    define_constant("ESOCKTNOSUPPORT", make_fixnum(ESOCKTNOSUPPORT));
#endif
#ifdef ESPIPE
    define_constant("ESPIPE", make_fixnum(ESPIPE));
#endif
#ifdef ESRCH
    define_constant("ESRCH", make_fixnum(ESRCH));
#endif
#ifdef ESRMNT
    define_constant("ESRMNT", make_fixnum(ESRMNT));
#endif
#ifdef ESTALE
    define_constant("ESTALE", make_fixnum(ESTALE));
#endif
#ifdef ESUCCESS
    define_constant("ESUCCESS", make_fixnum(ESUCCESS));
#endif
#ifdef ETIME
    define_constant("ETIME", make_fixnum(ETIME));
#endif
#ifdef ETIMEDOUT
    define_constant("ETIMEDOUT", make_fixnum(ETIMEDOUT));
#endif
#ifdef ETOOMANYREFS
    define_constant("ETOOMANYREFS", make_fixnum(ETOOMANYREFS));
#endif
#ifdef ETXTBSY
    define_constant("ETXTBSY", make_fixnum(ETXTBSY));
#endif
#ifdef EUCLEAN
    define_constant("EUCLEAN", make_fixnum(EUCLEAN));
#endif
#ifdef EUNATCH
    define_constant("EUNATCH", make_fixnum(EUNATCH));
#endif
#ifdef EUSERS
    define_constant("EUSERS", make_fixnum(EUSERS));
#endif
#ifdef EVERSION
    define_constant("EVERSION", make_fixnum(EVERSION));
#endif
#if defined(EWOULDBLOCK) && (!defined(EAGAIN) || (EWOULDBLOCK != EAGAIN))
    define_constant("EWOULDBLOCK", make_fixnum(EWOULDBLOCK));
#endif
#ifdef EXDEV
    define_constant("EXDEV", make_fixnum(EXDEV));
#endif
#ifdef EXFULL
    define_constant("EXFULL", make_fixnum(EXFULL));
#endif

#ifdef _WIN32
    win32_inits();
#endif

#if 0
#ifdef _WIN32
    if (isatty(0)) {   /* If stdin is a tty and not redirected */
            stdin_buffer_empty     = CreateEvent(NULL, true, true, NULL);
        stdin_buffer_not_empty = CreateEvent(NULL, true, false, NULL);
               /* These are nameless "manual reset" events */
        InitializeCriticalSection(&stdin_buffer_mutex);
        {
            DWORD thread_id;
            HANDLE thread_handle;
            thread_handle
                = CreateThread(NULL, 0,
                               (LPTHREAD_START_ROUTINE) stdin_producer,
                               NULL, 0, &thread_id);
            if (thread_handle == NULL)
                lose("Can't create stdin_producer thread");
        }

    }
#endif
#endif
}
Exemple #27
0
RcppExport SEXP nniv(SEXP arg1, SEXP arg2, SEXP arg3) {
  // 3 arguments
  // arg1 for parameters
  // arg2 for data
  // arg3 for Gibbs

  // data
  List list2(arg2); 

  const MatrixXd X=as< Map<MatrixXd> >(list2["X"]),
    Z=as< Map<MatrixXd> >(list2["Z"]);

  const VectorXd t=as< Map<VectorXd> >(list2["t"]),
    y=as< Map<VectorXd> >(list2["y"]);

  const int N=X.rows(), p=X.cols(), q=Z.cols(), r=p+q, s=p+r;

  // parameters
  List list1(arg1), 
    beta_info=list1["beta"], 
    Tprec_info=list1["Tprec"], 
    mu_info=list1["mu"], 
    theta_info=list1["theta"];

  // prior parameters
  List beta_prior=beta_info["prior"],
    Tprec_prior=Tprec_info["prior"],
    mu_prior=mu_info["prior"],
    theta_prior=theta_info["prior"];

  const double Tprec_prior_nu=as<double>(Tprec_prior["nu"]);
  const Matrix2d Tprec_prior_Psi=as< Map<MatrixXd> >(Tprec_prior["Psi"]);

  const double beta_prior_mean=as<double>(beta_prior["mean"]);
  const double beta_prior_prec=as<double>(beta_prior["prec"]);

  const Vector2d mu_prior_mean=as< Map<VectorXd> >(mu_prior["mean"]);
  const Matrix2d mu_prior_prec=as< Map<MatrixXd> >(mu_prior["prec"]);

  const VectorXd theta_prior_mean=as< Map<VectorXd> >(theta_prior["mean"]);
  const MatrixXd theta_prior_prec=as< Map<MatrixXd> >(theta_prior["prec"]);

  // initialize parameters
  double beta=as<double>(beta_info["init"]); 

  Matrix2d Tprec=as< Map<MatrixXd> >(Tprec_info["init"]);
  Vector2d mu   =as< Map<VectorXd> >(mu_info["init"]);
  VectorXd theta=as< Map<VectorXd> >(theta_info["init"]);

  // Gibbs
  List list3(arg3); //, save=list3["save"];

  const int burnin=as<int>(list3["burnin"]), M=as<int>(list3["M"]), 
    thin=as<int>(list3["thin"]), m=7+s;

  MatrixXd GS(M, m);

  // prior parameter intermediate values
  double beta_prior_prod=beta_prior_prec * beta_prior_mean;

  VectorXd theta_prior_prod=theta_prior_prec * theta_prior_mean;

  Vector2d mu_prior_prod=mu_prior_prec*mu_prior_mean;

  // parameter intermediate values
  Matrix2d Sigma, B_inverse;

  Sigma=Tprec.inverse();
  B_inverse.setIdentity();

  VectorXd gamma=theta.segment(0, p), 
    delta=theta.segment(p, q), 
    eta  =theta.segment(r, p);

  /*
    MatrixXd Theta(2, r);

    Theta.row(0)=theta.segment(0, r);
    Theta.bottomLeftCorner(1, q)=RowVectorXd::Zero(q);
    Theta.bottomRightCorner(1, p)=eta.transpose();
  */

  Vector2d eps, eps_sum;

  MatrixXd D(N, 2), theta_cond_var_root(s, s), W(2, s);

  W.setZero();

  MatrixXd theta_cond_prec(s, s);

  VectorXd theta_cond_prod(s), w(r);

  Matrix2d mu_cond_prec, mu_cond_var_root, E;

  Vector2d u, R, mu_cond_prod, mu_u;

  double beta_scale, beta_prec, beta_prod, beta_cond_var, beta_cond_mean;

  int h=0, i, l; 


  // Gibbs loop
  //for(int l=-burnin; l<=(M-1)*thin; ++l) {

  l=-burnin;

  do{
    // sample beta
    D.col(0).setConstant(-mu[0]);
    D.col(1).setConstant(-mu[1]);

    D.col(0) += (t - X*gamma - Z*delta);
    D.col(1) += (y - X*eta);

    beta_scale=1./(Sigma(0, 0)*t.dot(t));

    beta_prec=1./(beta_scale*Sigma.determinant());

    beta_prod=beta_prec*beta_scale
      *((Sigma(0, 0)*D.col(1)-Sigma(0, 1)*D.col(0)).array()*t.array()).sum();

    beta_cond_var=1./(beta_prec+beta_prior_prec);

    beta_cond_mean=beta_cond_var*(beta_prod+beta_prior_prod);

    beta=rnorm1d(beta_cond_mean, sqrt(beta_cond_var));

    B_inverse(1, 0)=-beta;

    // sample theta
    theta_cond_prec=theta_prior_prec;
    theta_cond_prod=theta_prior_prod;

    for(i=0; i<N; ++i) {
      /*
	W.topLeftCorner(1, p)=X.row(i);
	W.block(0, p, 1, q)=Z.row(i);
	W.bottomRightCorner(1, p)=X.row(i);
      */

      W.block(0, 0, 1, p)=X.row(i);
      W.block(0, p, 1, q)=Z.row(i);
      W.block(1, r, 1, p)=X.row(i);

      theta_cond_prec += (W.transpose() * Tprec * W);

      u[0]=t[i];
      u[1]=y[i];

      R=B_inverse*u-mu;

      theta_cond_prod += (W.transpose() * Tprec * R);
    }

    theta_cond_var_root=inv_root_chol(theta_cond_prec);
    // theta_cond_var_root=inv_root_svd(theta_cond_prec); // for validation only

    theta=theta_cond_var_root*(rnormXd(s)+theta_cond_var_root.transpose()*theta_cond_prod);

    gamma=theta.segment(0, p); 
    delta=theta.segment(p, q); 
    eta  =theta.segment(r, p);

    /*
      Theta.topRows(1)=theta.segment(0, r).transpose();
      Theta.bottomRightCorner(1, p)=eta.transpose();
    */

    // sample mu
    eps_sum.setZero();
    //W.setZero();

    E.setZero();

    for(i=0; i<N; ++i) {
      /*
	W.topLeftCorner(1, p)=X.row(i);
	W.block(0, p, 1, q)=Z.row(i);
	W.bottomRightCorner(1, p)=X.row(i);
      */

      W.block(0, 0, 1, p)=X.row(i);
      W.block(0, p, 1, q)=Z.row(i);
      W.block(1, r, 1, p)=X.row(i);

      /*
	w.segment(0, q)=Z.row(i);
	w.segment(q, p)=X.row(i);
      */

      u[0]=t[i];
      u[1]=y[i];

      //eps += B_inverse*u - Theta*w;
      eps = B_inverse*u - W*theta;
      eps_sum += eps;
      eps -= mu;
      E += eps*eps.transpose();
    }

    mu_cond_prod=Tprec*eps_sum+mu_prior_prod;

    mu_cond_prec=(N*Tprec+mu_prior_prec);

    mu_cond_var_root=inv_root_chol(mu_cond_prec);
    // mu_cond_var_root=inv_root_svd(mu_cond_prec); // for validation only

    mu=mu_cond_var_root*(rnormXd(2)+mu_cond_var_root.transpose()*mu_cond_prod);

    // sample Tprec
    Tprec = rwishart((E+Tprec_prior_Psi).inverse(), N+Tprec_prior_nu);
    Sigma = Tprec.inverse();

    if(l>=0 && l%thin == 0) {
      h = (l/thin);

      GS.block(h, 0, 1, s)=theta.transpose();

      GS(h, s)=beta;
      GS(h, s+1)=mu[0];
      GS(h, s+2)=mu[1];
      GS(h, s+3)=Tprec(0, 0);
      GS(h, s+4)=Tprec(0, 1);
      GS(h, s+5)=Tprec(0, 1);
      GS(h, s+6)=Tprec(1, 1);
    }

    l++;

  } while (l<=(M-1)*thin && beta==beta); 

  if(beta != beta) GS.conservativeResize(h+1, m);

  return wrap(GS);
}
Exemple #28
0
void compile_OMP_directive(expr x)
{
    expr dir;
    expr c = NULL;
    expv pclause,dclause;

    if(x == NULL) return;	/* error */

    if (debug_flag) {
	fprintf(stderr, "OMP_directive:\n");
	expv_output(x, stderr);
	fprintf(stderr, "\n");
    }

    check_for_OMP_pragma(x);
    check_for_XMP_pragma(-1, x);

    if(OMP_do_required){
	error("OpenMP DO directived must be followed by do statement");
	OMP_do_required = FALSE;
	return;
    }

    if(OMP_st_required != OMP_ST_NONE){
	error("OpenMP ATOMIC directives must be followed by assignment");
	return;
    }

    dir = EXPR_ARG1(x);

    if (EXPR_INT(dir) == OMP_F_THREADPRIVATE) {
        check_INDCL();
    } else {
        check_INEXEC();
    }

    if (EXPR_INT(dir) != OMP_F_END_DO &&
        EXPR_INT(dir) != OMP_F_END_PARALLEL_DO &&
        EXPR_INT(dir) != OMP_F_ATOMIC) {
	check_for_OMP_pragma(NULL);  /* close DO directives if any */
    }

    switch(EXPR_INT(dir)){
    case OMP_F_PARALLEL:
	push_ctl(CTL_OMP);
	compile_OMP_pragma_clause(EXPR_ARG2(x),OMP_PARALLEL,TRUE,
				  &pclause,&dclause);
	CTL_OMP_ARG(ctl_top) = list3(LIST,dir,pclause,dclause);
	EXPR_LINE(CTL_OMP_ARG(ctl_top)) = current_line;
	return;
    case OMP_F_END_PARALLEL:
	if(CTL_TYPE(ctl_top) == CTL_OMP &&
	   CTL_OMP_ARG_DIR(ctl_top) == OMP_F_PARALLEL){
	    CTL_BLOCK(ctl_top) = 
		OMP_pragma_list(OMP_PARALLEL,CTL_OMP_ARG_PCLAUSE(ctl_top),
				CURRENT_STATEMENTS);
	    EXPR_LINE(CTL_BLOCK(ctl_top)) = EXPR_LINE(CTL_OMP_ARG(ctl_top));
	    pop_ctl();
	} else  error("OpenMP PARALLEL block is not closed");
	return;

    case OMP_F_PARALLEL_DO:
	push_ctl(CTL_OMP);
	compile_OMP_pragma_clause(EXPR_ARG2(x),OMP_FOR,TRUE,
				  &pclause,&dclause);
	CTL_OMP_ARG(ctl_top) = list3(LIST,dir,pclause,dclause);
	EXPR_LINE(CTL_OMP_ARG(ctl_top)) = current_line;
	OMP_do_required = TRUE;
	return;
    case OMP_F_END_PARALLEL_DO:
/* 	if(CTL_TYPE(ctl_top) == CTL_OMP && */
/* 	   CTL_OMP_ARG_DIR(ctl_top) == OMP_F_PARALLEL_DO){ */
/* 	    CTL_BLOCK(ctl_top) =  */
/* 		OMP_pragma_list(OMP_PARALLEL,CTL_OMP_ARG_PCLAUSE(ctl_top), */
/* 				OMP_FOR_pragma_list( */
/* 				    CTL_OMP_ARG_DCLAUSE(ctl_top), */
/* 				    CURRENT_STATEMENTS)); */
/* 	    EXPR_LINE(CTL_BLOCK(ctl_top)) = EXPR_LINE(CTL_OMP_ARG(ctl_top)); */
/* 	    pop_ctl(); */
/* 	} else  error("OpenMP PARALLEL DO block is not closed"); */
	return;
	
    case OMP_F_DO:
	push_ctl(CTL_OMP);
	compile_OMP_pragma_clause(EXPR_ARG2(x),OMP_FOR,FALSE,
				  &pclause,&dclause);
	CTL_OMP_ARG(ctl_top) = list3(LIST,dir,pclause,dclause);
	EXPR_LINE(CTL_OMP_ARG(ctl_top)) = current_line;
	OMP_do_required = TRUE;
	return;
    case OMP_F_END_DO:
        /* OMP_F_DO has been already closed at F_ENDDO */
        /* Here, only the nowait clause is handled. */
      if (ctl_top_saved){
	dclause = CTL_OMP_ARG_DCLAUSE(ctl_top_saved);
	if (EXPR_ARG2(x) != NULL) list_put_last(dclause, EXPR_ARG2(x));
	CTL_BLOCK(ctl_top_saved) = OMP_FOR_pragma_list(dclause, CURRENT_STATEMENTS_saved);
	EXPR_LINE(CTL_BLOCK(ctl_top_saved)) = EXPR_LINE(CTL_OMP_ARG(ctl_top_saved));
	ctl_top_saved = NULL;
      }

	/* if(CTL_TYPE(ctl_top) == CTL_OMP && */
	/*    CTL_OMP_ARG_DIR(ctl_top) == OMP_F_DO){ */
	/*     dclause = CTL_OMP_ARG_DCLAUSE(ctl_top); */
	/*     if(EXPR_ARG2(x) != NULL) list_put_last(dclause,EXPR_ARG2(x)); */
	/*     CTL_BLOCK(ctl_top) =  */
	/* 	OMP_FOR_pragma_list(dclause,CURRENT_STATEMENTS); */
	/*     EXPR_LINE(CTL_BLOCK(ctl_top)) = EXPR_LINE(CTL_OMP_ARG(ctl_top)); */
	/*     pop_ctl(); */
	/* } else error("OpenMP DO block is not closed"); */

      return;
	
    case OMP_F_PARALLEL_SECTIONS:
	push_ctl(CTL_OMP);
	compile_OMP_pragma_clause(EXPR_ARG2(x),OMP_SECTIONS,TRUE,
				  &pclause,&dclause);
	CTL_OMP_ARG(ctl_top) = list3(LIST,dir,pclause,dclause);
	EXPR_LINE(CTL_OMP_ARG(ctl_top)) = current_line;
	return;
    case OMP_F_END_PARALLEL_SECTIONS:
	if(CTL_TYPE(ctl_top) == CTL_OMP &&
	   CTL_OMP_ARG_DIR(ctl_top) == OMP_F_PARALLEL_SECTIONS){
	    CURRENT_STATEMENTS = OMP_check_SECTION(CURRENT_STATEMENTS);
	    CTL_BLOCK(ctl_top) = 
		OMP_pragma_list(OMP_PARALLEL,CTL_OMP_ARG_PCLAUSE(ctl_top),
				OMP_pragma_list(OMP_SECTIONS,
						CTL_OMP_ARG_DCLAUSE(ctl_top),
						CURRENT_STATEMENTS));
	    EXPR_LINE(CTL_BLOCK(ctl_top)) = EXPR_LINE(CTL_OMP_ARG(ctl_top));
	    pop_ctl();
	} else  error("OpenMP PARALLEL SECTIONS block is not closed");
	return;

    case OMP_F_SECTIONS:
	push_ctl(CTL_OMP);
	compile_OMP_pragma_clause(EXPR_ARG2(x),OMP_SECTIONS,FALSE,
				  &pclause,&dclause);
	CTL_OMP_ARG(ctl_top) = list3(LIST,dir,pclause,dclause);
	EXPR_LINE(CTL_OMP_ARG(ctl_top)) = current_line;
	return;
    case OMP_F_END_SECTIONS:
	if(CTL_TYPE(ctl_top) == CTL_OMP &&
	   CTL_OMP_ARG_DIR(ctl_top) == OMP_F_SECTIONS){
	    CURRENT_STATEMENTS = OMP_check_SECTION(CURRENT_STATEMENTS);
	    dclause = CTL_OMP_ARG_DCLAUSE(ctl_top);
	    if(EXPR_ARG2(x) != NULL) list_put_last(dclause,EXPR_ARG2(x));
	    CTL_BLOCK(ctl_top) = 
		OMP_pragma_list(OMP_SECTIONS,dclause,CURRENT_STATEMENTS);
	    EXPR_LINE(CTL_BLOCK(ctl_top)) = EXPR_LINE(CTL_OMP_ARG(ctl_top));
	    pop_ctl();
	} else  error("OpenMP SECTIONS block is not closed");
	return;
	
    case OMP_F_SECTION:
	if(CTL_TYPE(ctl_top) == CTL_OMP &&
	   (CTL_OMP_ARG_DIR(ctl_top) == OMP_F_SECTIONS ||
	    CTL_OMP_ARG_DIR(ctl_top) == OMP_F_PARALLEL_SECTIONS)){
	    output_statement(OMP_pragma_list(OMP_SECTION,NULL,NULL));
	} else error("OpenMP SECTION appears outside SECTOINS"); 
	return;
	
    case OMP_F_SINGLE:
	push_ctl(CTL_OMP);
	compile_OMP_pragma_clause(EXPR_ARG2(x),OMP_SINGLE,FALSE,
				  &pclause,&dclause);
	CTL_OMP_ARG(ctl_top) = list3(LIST,dir,pclause,dclause);
	EXPR_LINE(CTL_OMP_ARG(ctl_top)) = current_line;
	return;
	
    case OMP_F_END_SINGLE:
	if(CTL_TYPE(ctl_top) == CTL_OMP &&
	   CTL_OMP_ARG_DIR(ctl_top) == OMP_F_SINGLE){
	    dclause = CTL_OMP_ARG_DCLAUSE(ctl_top);
	    //if(EXPR_ARG2(x) != NULL) list_put_last(dclause,EXPR_ARG2(x));
	    if (EXPR_ARG2(x) != NULL){
	      list lp;
	      FOR_ITEMS_IN_LIST(lp, EXPR_ARG2(x)){
		list_put_last(dclause, LIST_ITEM(lp));
	      }
	    }
Exemple #29
0
 virtual Value type_of() const
 {
   return list3(S_array, _element_type, dimensions());
 }
Exemple #30
0
int
handle_file_notifications (struct input_event *hold_quit)
{
  BYTE *p = file_notifications;
  FILE_NOTIFY_INFORMATION *fni = (PFILE_NOTIFY_INFORMATION)p;
  const DWORD min_size
    = offsetof (FILE_NOTIFY_INFORMATION, FileName) + sizeof(wchar_t);
  struct input_event inev;
  int nevents = 0;

  /* We cannot process notification before Emacs is fully initialized,
     since we need the UTF-16LE coding-system to be set up.  */
  if (!initialized)
    {
      notification_buffer_in_use = 0;
      return nevents;
    }

  enter_crit ();
  if (notification_buffer_in_use)
    {
      DWORD info_size = notifications_size;
      Lisp_Object cs = Qutf_16le;
      Lisp_Object obj = w32_get_watch_object (notifications_desc);

      /* notifications_size could be zero when the buffer of
	 notifications overflowed on the OS level, or when the
	 directory being watched was itself deleted.  Do nothing in
	 that case.  */
      if (info_size
	  && !NILP (obj) && CONSP (obj))
	{
	  Lisp_Object callback = XCDR (obj);

	  EVENT_INIT (inev);

	  while (info_size >= min_size)
	    {
	      Lisp_Object utf_16_fn
		= make_unibyte_string ((char *)fni->FileName,
				       fni->FileNameLength);
	      /* Note: mule-conf is preloaded, so utf-16le must
		 already be defined at this point.  */
	      Lisp_Object fname
		= code_convert_string_norecord (utf_16_fn, cs, 0);
	      Lisp_Object action = lispy_file_action (fni->Action);

	      inev.kind = FILE_NOTIFY_EVENT;
	      inev.timestamp = GetTickCount ();
	      inev.modifiers = 0;
	      inev.frame_or_window = callback;
	      inev.arg = Fcons (action, fname);
	      inev.arg = list3 (make_pointer_integer (notifications_desc),
				action, fname);
	      kbd_buffer_store_event_hold (&inev, hold_quit);
	      nevents++;

	      if (!fni->NextEntryOffset)
		break;
	      p += fni->NextEntryOffset;
	      fni = (PFILE_NOTIFY_INFORMATION)p;
	      info_size -= fni->NextEntryOffset;
	    }
	}
      notification_buffer_in_use = 0;
    }
  leave_crit ();
  return nevents;
}