Mercurial > projects > ldc
comparison gen/functions.cpp @ 119:79c9ac745fbc trunk
[svn r123] Fixed some typeinfo module name mismatches.
Fixed D-style varargs returning through pointer.
Fixed converting nested function to delegate.
Added std.string and std.format to Phobos.
author | lindquist |
---|---|
date | Mon, 26 Nov 2007 06:45:13 +0100 |
parents | 56a21f3e5d3e |
children | 9c79b61fb638 |
comparison
equal
deleted
inserted
replaced
118:d580b95cce2b | 119:79c9ac745fbc |
---|---|
394 iarg->setName("this"); | 394 iarg->setName("this"); |
395 fdecl->llvmThisVar = iarg; | 395 fdecl->llvmThisVar = iarg; |
396 assert(fdecl->llvmThisVar); | 396 assert(fdecl->llvmThisVar); |
397 ++iarg; | 397 ++iarg; |
398 } | 398 } |
399 int varargs = -1; | 399 |
400 if (f->linkage == LINKd && f->varargs == 1) | 400 if (f->linkage == LINKd && f->varargs == 1) { |
401 varargs = 0; | 401 iarg->setName("_arguments"); |
402 fdecl->llvmArguments = iarg; | |
403 ++iarg; | |
404 iarg->setName("_argptr"); | |
405 fdecl->llvmArgPtr = iarg; | |
406 ++iarg; | |
407 } | |
408 | |
402 for (; iarg != func->arg_end(); ++iarg) | 409 for (; iarg != func->arg_end(); ++iarg) |
403 { | 410 { |
404 Argument* arg = Argument::getNth(f->parameters, k++); | 411 Argument* arg = Argument::getNth(f->parameters, k++); |
405 //arg->llvmValue = iarg; | 412 //arg->llvmValue = iarg; |
406 //Logger::println("identifier: '%s' %p\n", arg->ident->toChars(), arg->ident); | 413 //Logger::println("identifier: '%s' %p\n", arg->ident->toChars(), arg->ident); |
407 if (arg && arg->ident != 0) { | 414 if (arg && arg->ident != 0) { |
408 if (arg->vardecl) { | 415 if (arg->vardecl) { |
409 arg->vardecl->llvmValue = iarg; | 416 arg->vardecl->llvmValue = iarg; |
410 } | 417 } |
411 iarg->setName(arg->ident->toChars()); | 418 iarg->setName(arg->ident->toChars()); |
412 } | |
413 else if (!arg && varargs >= 0) { | |
414 if (varargs == 0) { | |
415 iarg->setName("_arguments"); | |
416 fdecl->llvmArguments = iarg; | |
417 } | |
418 else if (varargs == 1) { | |
419 iarg->setName("_argptr"); | |
420 fdecl->llvmArgPtr = iarg; | |
421 } | |
422 else | |
423 assert(0); | |
424 varargs++; | |
425 } | 419 } |
426 else { | 420 else { |
427 iarg->setName("unnamed"); | 421 iarg->setName("unnamed"); |
428 } | 422 } |
429 } | 423 } |