summary refs log tree commit diff stats
path: root/compiler/lookups.nim
Commit message (Expand)AuthorAgeFilesLines
* Cpp codegen: handling of imported exceptions. Fixes #3571 (#7360)cooldome2018-04-101-2/+0
* Static[T] fixes (#7333)zah2018-03-241-1/+2
* fixes #6965Araq2017-12-281-3/+4
* fixes #1860; macro generating a wrong nkSymChoice nodeAndreas Rumpf2017-10-301-2/+10
* deprecated unary '<'Andreas Rumpf2017-10-291-1/+1
* first implementation of package level types that allow forwarding across modu...Andreas Rumpf2017-10-281-1/+1
* first implementation of the 'func' keywordAndreas Rumpf2017-09-231-2/+4
* .pure enums are much more convenient to use nowAndreas Rumpf2017-09-171-1/+3
* compiler: better error messages (#5613)Andreas Rumpf2017-03-261-13/+20
* big compiler refactoring; avoid globals for multi method dispatcher generationAndreas Rumpf2017-02-221-1/+1
* More progress towards a working #3691.Dominik Picheta2017-02-031-1/+1
* WIP: `as` with generics.Dominik Picheta2017-02-021-0/+3
* implements module grouping for the import statementAndreas Rumpf2016-12-211-2/+2
* recursive modules are only detected to improve error messagesAndreas Rumpf2016-11-241-4/+13
* fixes #4555Andreas Rumpf2016-08-021-7/+14
* compiler almost free of deprecated expr/stmt namesAndreas Rumpf2016-07-301-2/+2
* Locate 'attempt to redefine' errors at the import statement rather than at th...Kier Davis2016-07-301-0/+4
* fixes an valid 'T' is not used hintAndreas Rumpf2016-07-201-1/+2
* fixes #177Andreas Rumpf2016-05-111-3/+16
* first implementation of the new lambda-lifting pass; barely anything worksAndreas Rumpf2015-12-261-1/+1
* renamed inCompilesContext to compilesContextId; added test case for #3313Araq2015-09-181-1/+1
* don't generate memset calls for C++ objectsAraq2015-03-181-37/+37
* minor cleanupsAraq2015-03-011-1/+1
* nimsuggest improvementsAraq2015-01-301-5/+10
* fixes #1944Araq2015-01-181-0/+10
* nimfix now in its own directory; single file mode now the defaultAraq2014-10-051-1/+1
* 'pretty' command does not exist anymore; improvements for nimfixAraq2014-09-101-1/+0
* some improvements for nimfixAraq2014-09-091-0/+10
* added nimfix toolAraq2014-09-051-2/+25
* updated the compiler to use the new symbol namesAraq2014-08-281-8/+5
* the big renamefest: first stepsAraq2014-08-221-46/+45
* Renamed considerAccents to considerQuotedIdentClay Sweetser2014-05-261-10/+10
* Fixes #1200Clay Sweetser2014-05-241-1/+2
* Renamed 'considerAcc' to 'considerAccents' for clarityClay Sweetser2014-05-241-10/+10
* make some tests greenZahary Karadjov2014-03-161-1/+4
* Merge branch 'devel' of github.com:Araq/Nimrod into develZahary Karadjov2014-03-061-1/+1
|\
| * bugfix: unreported 'compiles' bugAraq2014-03-051-1/+1
* | split the inline and closure iterators into different symbol kinds for easier...Zahary Karadjov2014-03-061-1/+1
|/
* fixes #892Araq2014-02-141-0/+1
* bugfix: immediate templates are preferred consistently (danger: breaks code)Araq2014-02-041-1/+13
* 'nil' as a statement is deprecated, use an empty 'discard' insteadAraq2014-01-191-1/+1
* case consistency: cs:partial bootstraps on windowsAraq2013-12-291-7/+7
* case consistency part 4Araq2013-12-271-7/+7
* case consistency part 1Araq2013-12-271-43/+43
* attempt to merge newtemplAraq2013-12-241-2/+5
* small REPL improvementsAraq2013-06-281-1/+2
* fixes #437, fixes #436Araq2013-05-181-1/+1
* merged the persistent scopes work with the delayed proc compilation strategyZahary Karadjov2013-05-121-3/+1
|\
* | get rid of TOverloadIter.stackPtrZahary Karadjov2013-05-121-28/+36
* | get rid of ImportTablePos and ModuleTablePosZahary Karadjov2013-05-121-53/+52
n> # # - Only applies to mailto URLs that appear as links or are entered at # a 'g'oto prompt. Does not apply to other ways of sending mail, like # the 'c' (COMMENT) key, mailto as a FORM action, or mailing a file # from the 'P'rinting Options screen. # - Nothing is done for charset labelling, content-transfer-encoding # of non-ASCII characters, and other MIME niceties. # # Klaus Weide 20000712 ######################################################################## ########## Configurable variables ###################################### $SENDMAIL = '/usr/sbin/sendmail'; # The location of your sendmail binary $SELFURL = 'lynxcgi:/home/lynxdev/lynxcgi/mailto-form.pl'; # Where this script lives in URL space $SEND_TOKEN = '/vJhOp6eQ'; # When found in the PATH_INFO part of the URL, # this causes the script to actually send mail # by calling $SENDMAIL instead of just throwing # up a form. CHANGE IT! And don't tell anyone! # Treat it like a password. # Must start with '/', probably should have only # alphanumeric ASCII characters. ## Also, make sure the first line of this script points ## to your PERL binary ########## Nothing else to change - I hope ############################# ######################################################################## use CGI; $|=1; ### Upcase first character ##sub ucfirst { ## s/^./\U$1/; ##} # If there are multiple occurrences of the same thing, how to join them # into one string %joiner = (from => ', ', to => ', ', cc => ', ', subject => '; ', body => "\n\n" ); sub joiner { my ($key) = @_; if ($joiner{$key}) { $joiner{$key}; } else { " "; } } # Here we check whether this script is called for actual sending, rather # than form generation. If so, all the rest is handled by sub sendit, below. $pathinfo = $ENV{'PATH_INFO'}; if (defined($pathinfo) && $pathinfo eq $SEND_TOKEN) { $q = new CGI; print $q->header('text/plain'); sendit(); exit; } $method = $ENV{'REQUEST_METHOD'}; $querystring = $ENV{'QUERY_STRING'}; if ($querystring) { if ($method && $method eq "POST" && $ENV{'CONTENT_LENGTH'}) { $querystring =~ s/((^|\&)to=[^?&]*)\?/$1&/; $q0 = new CGI; $q = new CGI($querystring); @fields = $q0->param(); foreach $key (@fields) { @vals = $q0->param($key); # print "Content-type: text/html\n\n"; # print "Appending $key to \$q...\n"; $q->append($key, @vals); # print "<H2>Current Values in \$q0</H2>\n"; # print $q0->dump; # print "<H2>Current Values in \$q</H2>\n"; # print $q->dump; } } else { $querystring =~ s/((^|\&)to=[^?&]*)\?/$1&/; $q = new CGI($querystring); } } else { $q = new CGI; } print $q->header; $long_title = $ENV{'QUERY_STRING'}; $long_title =~ s/^from=([^&]*)\&to=//; $long_title = "someone" unless $long_title; $long_title = "Compose mail for $long_title"; if (length($long_title) > 72) { $title = substr($long_title,0,72) . "..."; } else { $title = $long_title; } $long_title =~ s/&/&amp;/g; $long_title =~ s/</&lt;/g; print $q->start_html($title), "\n", $q->h1($long_title), "\n", $q->start_form(-method=>'POST', -action => $SELFURL . $SEND_TOKEN), "\n"; print "<TABLE>\n"; @fields = $q->param(); foreach $key (@fields) { @vals = $q->param($key); if (scalar(@vals) != 1) { print "multiple values " . scalar(@vals) ." for $key!\n"; $q->param($key, join (joiner($key), @vals)); } } foreach $key (@fields) { $_ = lc($key); if ($_ ne $key) { print "noncanonical case for $key!\n"; $val=$q->param($key); $q->delete($key); if (!$q->param($_)) { $q->param($_, $val); } else { $q->param($_, $q->param($_) . joiner($_) . "$val"); } } } foreach $key ('from', 'to', 'cc', 'subject') { print $q->Tr, $q->td(ucfirst($key) . ":"), $q->td($q->textfield(-name=>$key, -size=>60, -default=>$q->param($key))), "\n"; $q->delete($key); } # Also pass on any unrecognized header fields that were specified. # This may not be a good idea for general use! # At least some dangerous header fields may have to be suppressed. @keys = $q->param(); if (scalar(@keys) > (($q->param('body')) ? 1 : 0)) { print "<TR><TD colspan=2><EM>Additional headers:</EM>\n"; foreach $key ($q->param()) { if ($key ne 'body') { print $q->Tr, $q->td(ucfirst($key) . ":"), $q->td($q->textfield(-name=>$key, -size=>60, -default=>$q->param($key))), "\n"; } } } print "</TABLE>\n"; print $q->textarea(-name=>'body', -default=>$q->param('body')), "\n"; print "<PRE>\n\n</PRE>", "\n", $q->submit(-value=>"Send the message"), "\n", $q->endform, "\n"; print "\n"; exit; # This is for header field values. sub sanitize_field_value { my($val) = @_; $val =~ s/\0/./g; $val =~ s/\r\n/\n/g; $val =~ s/\r/\n/g; $val =~ s/\n*$//g; $val =~ s/\n+/\n/g; $val =~ s/\n(\S)/\n\t$1/g; $val; } sub sendit { open (MAIL, "| $SENDMAIL -t -oi -v") || die ("$0: Can't run sendmail: $!\n"); @fields = $q->param(); foreach $key (@fields) { @vals = $q->param($key); if (scalar(@vals) != 1) { print "multiple values " . scalar(@vals) ." for $key!\n"; $q->param($key, join (joiner($key), @vals)); } } foreach $key (@fields) { if ($key ne 'body') { if ($key =~ /[^A-Za-z0-9_-]/) { print "$0: Ignoring malformed header field named '$key'!\n"; next; } print MAIL ucfirst($key) . ": " . sanitize_field_value($q->param($key)) . "\n" or die ("$0: Feeding header to sendmail failed: $!\n"); } } print MAIL "\n" or die ("$0: Ending header for sendmail failed: $!\n"); print MAIL $q->param('body'), "\n" or die ("$0: Feeding body to sendmail failed: $!\n"); close(MAIL) or warn $! ? "Error closing pipe to sendmail: $!" : ($? & 127) ? ("Sendmail killed by signal " . ($? & 127) . ($? & 127) ? ", core dumped" : "") : "Return value " . ($? >> 8) . " from sendmail"; }