The R Project SVN R

Rev

Rev 27263 | Rev 30604 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 27263 Rev 27298
Line 453... Line 453...
453
	errorcall(call, "function name must be a string (of length 1)");
453
	errorcall(call, "function name must be a string (of length 1)");
454
    if (PkgSymbol == NULL) PkgSymbol = install("PACKAGE");
454
    if (PkgSymbol == NULL) PkgSymbol = install("PACKAGE");
455
    strcpy(DLLname, "");
455
    strcpy(DLLname, "");
456
    args = pkgtrim(args);
456
    args = pkgtrim(args);
457
 
457
 
458
    if (!(fun=R_FindSymbol(CHAR(STRING_ELT(op, 0)), DLLname, NULL)))
458
    if (!(fun=R_FindSymbol(CHAR(STRING_ELT(op, 0)), DLLname, NULL))) {
459
	if(strlen(DLLname))
459
	if(strlen(DLLname))
460
	    errorcall(call,
460
	    errorcall(call,
461
		      ".External function name not in DLL for package %s", 
461
		      ".External function name not in DLL for package %s", 
462
		      DLLname);
462
		      DLLname);
463
	else
463
	else
464
	    errorcall(call, ".External function name not in load table");
464
	    errorcall(call, ".External function name not in load table");
-
 
465
    }
465
 
466
 
466
    if(symbol.symbol.external && symbol.symbol.external->numArgs > -1) {
467
    if(symbol.symbol.external && symbol.symbol.external->numArgs > -1) {
467
	if(symbol.symbol.external->numArgs != length(args))
468
	if(symbol.symbol.external->numArgs != length(args))
468
	    error("Incorrect number of arguments (%d), expecting %d for %s",
469
	    error("Incorrect number of arguments (%d), expecting %d for %s",
469
		  length(args), symbol.symbol.external->numArgs, CHAR(STRING_ELT(op, 0)));
470
		  length(args), symbol.symbol.external->numArgs, CHAR(STRING_ELT(op, 0)));
Line 488... Line 489...
488
 
489
 
489
    if (PkgSymbol == NULL) PkgSymbol = install("PACKAGE");
490
    if (PkgSymbol == NULL) PkgSymbol = install("PACKAGE");
490
    strcpy(DLLname, "");
491
    strcpy(DLLname, "");
491
    args = pkgtrim(args);
492
    args = pkgtrim(args);
492
 
493
 
493
    if (!(fun=R_FindSymbol(CHAR(STRING_ELT(op, 0)), DLLname, &symbol)))
494
    if (!(fun=R_FindSymbol(CHAR(STRING_ELT(op, 0)), DLLname, &symbol))) {
494
	if(strlen(DLLname))
495
	if(strlen(DLLname))
495
	    errorcall(call, ".Call function name not in DLL for package %s", 
496
	    errorcall(call, ".Call function name not in DLL for package %s", 
496
		      DLLname);
497
		      DLLname);
497
	else
498
	else
498
	    errorcall(call, ".Call function name not in load table");
499
	    errorcall(call, ".Call function name not in load table");
-
 
500
    }
499
    args = CDR(args);
501
    args = CDR(args);
500
 
502
 
501
    for(nargs = 0, pargs = args ; pargs != R_NilValue; pargs = CDR(pargs)) {
503
    for(nargs = 0, pargs = args ; pargs != R_NilValue; pargs = CDR(pargs)) {
502
        if (nargs == MAX_ARGS)
504
        if (nargs == MAX_ARGS)
503
            errorcall(call, "too many arguments in foreign function call");
505
            errorcall(call, "too many arguments in foreign function call");
Line 1238... Line 1240...
1238
    while ((*q = *p) != '\0') {
1240
    while ((*q = *p) != '\0') {
1239
	p++;
1241
	p++;
1240
	q++;
1242
	q++;
1241
    }
1243
    }
1242
 
1244
 
1243
    if (!(fun = R_FindSymbol(buf, DLLname, &symbol)))
1245
    if (!(fun = R_FindSymbol(buf, DLLname, &symbol))) {
1244
	if(strlen(DLLname))
1246
	if(strlen(DLLname))
1245
	    errorcall(call, "%s function name not in DLL for package %s",
1247
	    errorcall(call, "%s function name not in DLL for package %s",
1246
		      which ? "Fortran" : "C", DLLname);
1248
		      which ? "Fortran" : "C", DLLname);
1247
	else
1249
	else
1248
	    errorcall(call, "%s function name not in load table",
1250
	    errorcall(call, "%s function name not in load table",
1249
		      which ? "Fortran" : "C");
1251
		      which ? "Fortran" : "C");
-
 
1252
    }
1250
 
1253
 
1251
    if(symbol.symbol.c && symbol.symbol.c->numArgs > -1) {
1254
    if(symbol.symbol.c && symbol.symbol.c->numArgs > -1) {
1252
	if(symbol.symbol.c->numArgs != nargs)
1255
	if(symbol.symbol.c->numArgs != nargs)
1253
	    error("Incorrect number of arguments (%d), expecting %d for %s",
1256
	    error("Incorrect number of arguments (%d), expecting %d for %s",
1254
		  nargs, symbol.symbol.c->numArgs, buf);
1257
		  nargs, symbol.symbol.c->numArgs, buf);